Copyright © 2026 Unity Technologies
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 } } }
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
Issues you vote on will appear here