首页 > 解决方案 > GameObject被哪个脚本销毁

问题描述

我试图找出我的游戏对象正在被我的游戏中的哪个脚本破坏。到目前为止,我尝试打印堆栈,但没有提到破坏游戏对象的脚本的详细信息: Debug.Log(UnityEngine.StackTraceUtility.ExtractStackTrace())

标签: c#unity3dgameobject

解决方案


Destroy实际上并没有立即“销毁”它传递的对象,它会将对象添加到对象列表中,以便 Unity 在帧结束时销毁。这是 when OnDestroyis called,这就是为什么你不会看到什么时候Destroy调用的堆栈(如果你真的会看到一个堆栈,我很确定本机代码会调用它)。

所以这应该是它的结束......对吧?

嗯,不完全是。如果您检查事件函数的执行顺序,OnDestroy则在, 之前调用了一个事件函数OnDisable

对我们来说幸运的是,这个函数不仅被更早地调用过,而且(至少当我上次在 Unity 2018.4 上以编辑器的播放模式测试它时)OnDisable实际上是由 调用的Destroy,所以如果你在那里得到堆栈,你应该希望能够以确定谁在破坏你的单一行为。


推荐阅读