我试图找出我的游戏对象被游戏中的哪个脚本破坏了。
到目前为止,我尝试打印堆栈,但是那里没有提到销毁游戏对象的脚本的详细信息
码:
Debug.Log(UnityEngine.StackTraceUtility.ExtractStackTrace())
答案 0 :(得分:1)
Destroy
实际上并不“销毁”它立即传递的对象,而是将对象添加到对象列表中,以便Unity在帧的 end 处销毁。 这是调用OnDestroy
的时间,这就是为什么在调用Destroy
时看不到堆栈的原因(如果您实际上会看到一个堆栈,我很确定本机代码会调用它。)
那应该是结局了...对吧?
嗯,不完全是。如果您选中Order of Execution for Event Functions,则在OnDestroy
,OnDisable
之前会调用一个事件函数。
对我们来说幸运的是,不仅这个函数被更早地调用了,而且(至少当我最后一次在Unity 2018.4中以编辑器的播放模式对其进行测试时)OnDisable
实际上是由Destroy
调用的,因此如果您将堆栈放在那里,则应该能够确定谁破坏了您的单行为。