unity3d 如何找到破坏我的对象的脚本?

kninwzqo  于 2022-12-13  发布在  其他
关注(0)|答案(3)|浏览(161)

我在一个物理量很大的项目上工作,有很多刚体,也有很多代码。我有很多脚本,创建力,管理关节等等。
由于某种原因,有时候某个对象会被随机破坏。它就这样消失了。我不知道是哪个脚本导致的。有没有办法找到哪个脚本叫Ondestroy之类的。
谢谢你的帮助。

9gm1akwq

9gm1akwq1#

在monobehavior的OnDestroy()方法中放置一个brakpoint,并检查调用堆栈。
要调试你的项目,你可以检查Debugging C# code in Unity。一旦你弄清楚了,并检查了如何攻击unity和在设置的断点停止执行,你可以通过Window-〉Debug-〉Callstack来查看在断点停止执行的调用栈**,并查看导致对象破坏的调用。

t0ybt7op

t0ybt7op2#

只需拥有一个组件,例如

public class DestroyDebug : MonoBehaviour 
{
    void OnDestroy ()
    { 
        Debug.Log($"{name} was just destroyed");
    }
}

如果你需要确切的示例和环境,或者在控制台中,你至少可以看到哪些类和调用导致了这个对象的破坏的整个堆栈跟踪。

pprl5pva

pprl5pva3#

如果这对您来说仍然是一个问题(或者如果其他人也有这个问题),我也遇到了同样的问题,并在这里找到了解决方案,即在OnDisable中检查gameObject.activeInHierarchy,如下所示:

void OnDisable()
{
  // If object will destroy in the end of current frame...
  if (gameObject.activeInHierarchy)
  {
    Debug.LogError("Log an error with a stack trace in debug mode");
  }
  // If object just deactivated..
  else
  {
 
  }
}

相关问题