- Home /
Prefab Custom Inspector Script - Odd Behaviour
Hello,
I have a GameObject in my scene with a script (PrefabManager) on it that references a bunch of Prefabs in the Project window. Note, these Prefabs are NOT within the scene.
When I drag these prefabs into the scene, the PrefabManager is still referencing the Prefab from the Project (not the scene) - which is fine, this is normal.
So when I delete the prefab from the scene, the reference is not broken (as it's referencing from the Project.
However ...
When I put a custom Inspector Editor script on the Prefab that overrides the 'OnInspectorGUI', the reference from the PrefabManager does something very odd!
If I now drag a prefab into the scene, the reference from the Manager is now referencing the prefab in the Scene, and NOT the project anymore.
Thus - if I now delete the Prefab from the scene, the reference is broken.
Any ideas as to why this is happening? I it due to serialising?
My Custom Inspector Script:
public override void OnInspectorGUI(){
InventoryModule _target =(InventoryModule)target;
//build a name list for all buildings in inventory system
int _selection = FindNameInBuilding(_target._name);
string[] _names = GetBuildingNames();
_selection = EditorGUILayout.Popup("Name ", _selection, _names);
BuildingObject _building = GetBuilding(_selection);
if(_building == null){
_target._name = "";
_target._buildingObject = null;
EditorGUILayout.HelpBox("Please select a Building Name to populate module.", MessageType.Error);
}
else{
_target._name = _names[_selection];
_target._buildingObject = _building;
}
DrawDefaultInspector();
}
All this is doing is making a List of possible strings given from 'GetBuildingNames'. This is then passed as a string into the target.
I still think we're missing some context here to diagnose this problem. How does your Prefab$$anonymous$$anager reference your prefabs?
That said, while it's not clear to me what this custom inspector is supposed to do exactly, it never actually serializes any potential changes to the target in the code you pasted (and probably should test for user input before doing so). For addressing that issue, you might find my answer to this question helpful.
Answer by oliver-jones · Jan 09, 2017 at 02:11 PM
It turns out that it was because I was referencing the GameObject within a Class. I was also applying that same class to the GameObject when placing it into the scene, which in turn - changed the reference.
Your answer
Follow this Question
Related Questions
Prefab referenced into Inspector and then Istantiated: Twice in memory? 0 Answers
How to access a child input field from a parent prefab script. 0 Answers
Prefab loses associations in Resources folder 2 Answers
How to use a float value from coroutine 1 and use in coroutine 2? 1 Answer
prefab contents of the Custom inspector disappear. 0 Answers