Search Issue Tracker
By Design
Votes
0
Found in
2018.4.0f1
2018.4.1f1
2019.1.0a1
2019.2.0a1
2019.3.0a1
Issue ID
1170729
Regression
No
Prefab property's displayed value does not update when modified by a script
How to reproduce:
1. Open attached 'project-1170729.zip' project
2. In Hierarchy window select 'Box' and inspect its ID value
3. In Assets folder select 'ItemLibrary'
4. In Inspector select Context Menu > 'Save'
5. In Hierarchy window select 'Box' and inspect its ID value
6. In Inspector select 'Open' and inspect prefab's ID value
Expected result: prefab's ID value is '0'
Actual result: prefab's ID value is '5'
Reproducible with: 2018.4.5f1, 2019.1.12f1, 2019.2.0b10, 2019.3.0a11
Could not test with: 2017.4.30f1 and earlier (different prefab interface)
Additional note: the actual value is updated (dragging the prefab into Hierarchy window or re-opening the project will display changed value)
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
- Samples Showcase script warning does not clear after enabling required settings until GameObject is reselected
- VFX Particles receive shadow artifacts when using ShaderGraph with enabled shadows and Face Camera Plane Orient mode
- Blackboard in Visual Effect Graph Resizes After Exiting Full-Screen Mode
- Water in HDRP Sample Scene Freezes When Selecting Dropdown in Inspector
- During compilation VFX particles are missing cyan placeholder shader when using Shader Graph output
Resolution Note (2019.3.X):
This case modifies the imported prefab data but does not save it back to source file. So the imported data has become out of sync with the source data since the change was not saved back to the .prefab file. In Prefab Mode we open the .prefab source file that is why the values does not match the modified imported prefab.
Since 18.3 prefabs are imported which means that changing state on a imported Prefab Asset needs to be saved back to the .prefab source file if this changes should be persisted and reflected in existing prefab instances.
Below is an example of how you can save a change back to the prefab source file after changing the imported Prefab Asset:
Modified from ItemLibrary.cs from the repro project:
[ContextMenu("Save")]
public void Save() {
for (int i = 0; i < items.Length; i++) {
if (items[i] != null) {
GameObject itemPrefab = AssetDatabase.LoadAssetAtPath(AssetDatabase.GetAssetPath(items[i]), typeof(GameObject)) as GameObject;
Undo.RecordObject(itemPrefab.GetComponent<ItemObject>(), "Updating Item " + i + " Component");
itemPrefab.GetComponent<ItemObject>().item.ID = i;
PrefabUtility.SavePrefabAsset(itemPrefab); <-- ensures saving change back to the .prefab file.
}
}
}