出现现象和原因
这个报错一般出现在我们在 Editor 下,停止运行的时候。
可能会伴有另一个错误提示你内存中有些东西没有清掉,并顺带导致你下次编辑器中运行时出现奇怪的错误。(尤其对于单例对象)
这是因为代码中某个脚本销毁时(常见如 OnDisable),以某种方式调用了GameObject.Find("xxxx")。
解决
最简单的方式就是不要在Ondisable里做这种 GameObject.Find("xxxx") 调用。
但有时候我们不得不这样做,这时我们可以利用生命周期函数中的 OnApplicationQuit() 方法,具体如下:
bool isQuit = false;
private void OnDisable()
{
if (!isQuit)
{
GameObject.Find("XXX");
//...
}
}
private void OnApplicationQuit()
{
isQuit = true;
}
在退出时 OnApplicationQuit() 是早于 OnDisable() 调用的,预先设置一个标志位,规避会报错的语句。