Search Issue Tracker
By Design
By Design in 2023.1.X
Votes
0
Found in
2020.3.43f1
2021.3.16f1
2022.2.2f1
2023.1.0a24
Issue ID
UUM-21741
Regression
No
Prefab modification is not detected when adding a new array element
How to reproduce:
1. Open the user’s attached “Prefab Change Detection But.zip” project
2. Add “Prefab” Prefab to the Hierarchy and observe the data array in the Inspector
3. Press the “Change Data” button and observe the data array
4. Enter Play Mode and observe the data array in the Inspector
Expected result: Newly added array element is detected as a prefab modification
Actual result: Newly added array element is not detected as a prefab modification
Reproducible with: 2020.3.43f1, 2021.3.16f1, 2022.2.2f1, 2023.1.0a24
Reproduced on: macOS 12.4 (Intel)
Note: After the 3rd step a new array element is added with a value “9” but it’s not detected as a prefab modification so its value is changed to “0” after entering Play Mode
Add comment
All about bugs
View bugs we have successfully reproduced, and vote for the bugs you want to see fixed most urgently.
Latest issues
- “FMOD failed to set the software format to the custom sample rate…” warnings are thrown as System Sample Rate value is being changed in Audio section of Project Settings window
- VFX Marquee selection does match the visual indicator
- “Invalid AABB aabb” errors are spammed when “Infinity” value is entered in Collider Component fields
- Editor Role does not sync with the MPPM Play Mode Scenario Role when entering Play mode
- Long asset names cause overlap with the “Find” function in search result tabs
Resolution Note:
Note that you need to use RecordPrefabInstancePropertyModifications() when editing properties directly instead of using SerializedProperty. Check the docs for for an example:
https://docs.unity3d.com/ScriptReference/PrefabUtility.RecordPrefabInstancePropertyModifications.html
[CustomEditor(typeof(NewBehaviourScript))]
public class NewBehaviourScriptEditor : Editor
{
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
if (GUILayout.Button("Change Data"))
{
var target = (NewBehaviourScript)this.target;
Undo.RecordObject(target, "Change Data");
target.data = new float[] { 0, 1, 2, 3, 4, 9999, 5, 6, 7, 8, 9 };
PrefabUtility.RecordPrefabInstancePropertyModifications(target); // <--- you need this
}
}
}
Resolution Note (2023.1.X):
Note that you need to use RecordPrefabInstancePropertyModifications() when editing properties directly instead of using SerializedProperty. Check the docs for for an example:
https://docs.unity3d.com/ScriptReference/PrefabUtility.RecordPrefabInstancePropertyModifications.html
[CustomEditor(typeof(NewBehaviourScript))]
public class NewBehaviourScriptEditor : Editor
{
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
if (GUILayout.Button("Change Data"))
{
var target = (NewBehaviourScript)this.target;
Undo.RecordObject(target, "Change Data");
target.data = new float[] { 0, 1, 2, 3, 4, 9999, 5, 6, 7, 8, 9 };
PrefabUtility.RecordPrefabInstancePropertyModifications(target); // <--- you need this
}
}
}