GameObject 被哪个脚本销毁

Man*_*ngh 5 c# unity-game-engine gameobject

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

TJ *_*ael 5

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

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

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

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

  • 谢谢。这是一个救星。 (2认同)
  • 悲伤。在 2020.3 中,OnDisable 是从 Unity 代码中无堆栈调用的,就像 OnDestroy 一样,所以这似乎不再起作用了? (2认同)