Unity3d 关闭场景时未清理某些对象
场景加载时控制台中会出现此错误: 关闭场景时未清理某些对象。(你是否从OnDestroy中产生了新的游戏对象?) 我知道这是因为我在一个Unity3d 关闭场景时未清理某些对象,unity3d,unity5,Unity3d,Unity5,场景加载时控制台中会出现此错误: 关闭场景时未清理某些对象。(你是否从OnDestroy中产生了新的游戏对象?) 我知道这是因为我在一个ondestory方法中实例化了一个对象,我知道应用程序退出时会出现这个问题。但我不知道如何使用SceneManager.LoadScene()解决现场更改问题 是否有任何方法可以满足此需求,例如OnSceneUnload?您可以使用onlevelwasload(int-level)例如: void OnLevelWasLoaded(int level)
ondestory
方法中实例化了一个对象,我知道应用程序退出时会出现这个问题。但我不知道如何使用SceneManager.LoadScene()解决现场更改问题
是否有任何方法可以满足此需求,例如OnSceneUnload
?您可以使用onlevelwasload(int-level)
例如:
void OnLevelWasLoaded(int level)
{
if (Application.loadedLevelName == "MyNextScene")
{
// Clean Up leaked objects
}
}
当场景发生变化时,将调用它
更新:
上面的建议是创建在加载新场景时未清理的脚本,因此基本上您需要在该脚本中使用以下内容:
void Awake()
{
DontDestroyOnLoad(this.gameObject);
}
然后将未清理的对象存储在此脚本的某些集合中,并在场景更改时让它为您清理。谢谢!它似乎不起作用。我添加了void onlevelwasload(int-level){isQuitting=true;}
在每个脚本上使用OnDestroy
方法,但它仍然不起作用(顺便说一句,它在应用程序退出时仍然起作用,并且是相同的代码),那么您真正需要做的是将这个神奇的方法添加到任何在场景之间持续的活动Monobeahavious中(就像DontDestroyOnLoad(this.gameObject);
)@rap-2-h我编辑了我的答案,我希望它现在更清楚。我认为你更可能有设计问题。你的代码中似乎存在矛盾。OnDestroy在切换场景时创建了一个新对象。这听起来不适合我。我宁愿通过PlayerRefs存储关于对象需求的信息,并在新场景中创建对象读取播放器的优先顺序。