Destroy();
在Unity中,常用Destroy方法来删除物体或者组件,例如
Destroy(gameObject);
但Destroy具有一个延时性,此函数并不一定会在当前帧完成删除操作,若在Destroy方法后继续寻找索要删除的物体时,你所能获取到的并不为null,依然还能获取到你将要删除的物体,例如
gameObject.AddComponent<BoxCollider>();
Destroy(gameObject.GetComponent<BoxCollider>());
Debug.Log(gameObject.GetComponent<BoxCollider>());
当这段代码放在同一方法下或同一帧时,此时,你所Log出来的依旧是你所添加的那个BoxCollider,并不是null,解决方法是使用DestroyImmediate代替Destroy,将以上代码替换成
gameObject.AddComponent<BoxCollider>();
DestroyImmediate(gameObject.GetComponent<BoxCollider>());
Debug.Log(gameObject.GetComponent<BoxCollider>());
此时,你所Log出来的则会是null