我试图找出我的游戏对象正在被我的游戏中的哪个脚本破坏。到目前为止,我尝试打印堆栈,但没有提到破坏游戏对象的脚本的详细信息:
Debug.Log(UnityEngine.StackTraceUtility.ExtractStackTrace())
1067 次
1 回答
5
Destroy
实际上并没有立即“销毁”它传递的对象,它会将对象添加到对象列表中,以便 Unity 在帧结束时销毁。这是 when OnDestroy
is called,这就是为什么你不会看到什么时候Destroy
调用的堆栈(如果你真的会看到一个堆栈,我很确定本机代码会调用它)。
所以这应该是它的结束......对吧?
嗯,不完全是。如果您检查事件函数的执行顺序,OnDestroy
则在, 之前调用了一个事件函数OnDisable
。
对我们来说幸运的是,这个函数不仅被更早地调用过,而且(至少当我上次在 Unity 2018.4 上以编辑器的播放模式测试它时)OnDisable
实际上是由 调用的Destroy
,所以如果你在那里得到堆栈,你应该希望能够以确定谁在破坏你的单一行为。
于 2019-12-29T14:23:23.993 回答