【发布时间】:2022-12-11 12:08:49
【问题描述】:
我从事一个物理繁重的项目,其中有很多刚体,代码也很繁重。我有很多脚本,可以创建力量、管理关节等。
由于某种原因,有时会随机销毁某个对象。它就这样消失了。我不知道是哪个脚本导致的。有没有办法找出哪个脚本称为 Ondestroy 之类的。
谢谢你的帮助。
【问题讨论】:
标签: unity3d
我从事一个物理繁重的项目,其中有很多刚体,代码也很繁重。我有很多脚本,可以创建力量、管理关节等。
由于某种原因,有时会随机销毁某个对象。它就这样消失了。我不知道是哪个脚本导致的。有没有办法找出哪个脚本称为 Ondestroy 之类的。
谢谢你的帮助。
【问题讨论】:
标签: unity3d
在你的 monobehaviour 的 OnDestroy() 方法中放置一个断点并检查调用堆栈。
要调试您的项目,您可以查看Debugging C# code in Unity。一旦你弄清楚并检查如何攻击统一并在设置的断点处停止执行,你可以使用 Window->Debug->Callstack 查看调用堆栈执行在您的断点处停止并查看导致您的对象破坏的名称。
【讨论】:
只需拥有一个组件,例如
public class DestroyDebug : MonoBehaviour
{
void OnDestroy ()
{
Debug.Log($"{name} was just destroyed");
}
}
如果您需要确切的实例和环境,或者在控制台中,您可以在 Debugging your code 处放置一个断点,或者您至少已经可以看到整个堆栈跟踪,其中哪些类和调用恰好导致了该对象的销毁。
【讨论】:
如果这对您来说仍然是个问题(或者如果其他人有这个问题),我遇到了同样的问题并找到了解决方案here,即在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
{
}
}
【讨论】: