The other questions about this error don’t seem to be caused by the situation that I will show. I’m on Unity 5.3.4.
I have two prefabs, Parent and Child. Child is an empty GameObject (has just Transform component). Parent has the following script:
using UnityEngine;
public class TestParenting : MonoBehaviour {
public GameObject prefab;
public int dummy;
private void OnValidate() {
Debug.Log("validate testparenting. childs found: " + GetComponentsInChildren<Transform>(true).Length);
UpdateChild();
}
private void UpdateChild() {
// GetComponentsInChildren also returns the Transform in the parent
if (GetComponentsInChildren<Transform>(true).Length < 2)
NewChild();
}
private void NewChild() {
GameObject instance = Instantiate(prefab);
instance.name = "child";
instance.transform.SetParent(transform);
}
}
The expected behaviour is that Parent always have to have a Child, which is an instance of the Child prefab attached to the script in Editor, and checked in OnValidate. OnValidate is executed as a Unity event when any change occurs in the editor for the script, and in deserialization (not precisely sure about the moment in this last case).
I get the error when I hit the play button in Editor and Parent has no Child yet (and in other situations related to prefab modification). When I hit play and I get the error, I also get “Some objects were not cleaned up when closing the scene. (Did you spawn new GameObjects from OnDestroy?)”.
I think it is a prefab serialization issue, but can’t fix it.
What can I do to get rid of this error?