【问题标题】:Unity OnLevelWasLoaded not being calledUnity OnLevelWasLoaded 未被调用
【发布时间】:2016-01-24 00:21:51
【问题描述】:

我有一个名为 StartGame 的脚本,它可以在选择不同的游戏模式时执行不同的操作。 Unity 的 API 和论坛建议使用 OnLevelWasLoaded,但它没有被调用。事实上,当我在 Visual Studio 中将鼠标悬停在它上面时,它会告诉我方法是“StartGame.OnLevelWasLoaded”。我很确定这意味着它没有覆盖该方法。有没有其他人有这个问题?我也在使用 Unity 5.3。

【问题讨论】:

  • 能否提供相关代码?
  • Unity 通过反射而不是覆盖来查找方法。工具提示无关紧要——我们确实需要查看代码。
  • 确实有很多关于这个问题的线索。这是一个answers.unity3d.com/questions/1112017/…。我们也遇到过这个问题,但只是在编辑器中。 @ 31eee384 附带说明,尽管普遍认为反射用于回调,但事实并非如此。 blogs.unity3d.com/2015/12/23/1k-update-calls
  • @fafase 它仍在反映代码,对吧?只是没有System.Reflection。不过感谢您的链接——我不知道具体发生了什么,我当然不会再称之为反射了。
  • 我猜这是他们自己的内部运作。我不能确定发生了什么,长期以来一直认为这是反射,即使我认为这是反射,因为它看起来像它。似乎更多的是文件读取,搜索特定字符串,然后将方法的内存位置分配给委托集合。有点奇怪,因为它不在智能感知中,所以它不会知道该方法,但是如果您尝试执行错误,它会知道它(更新中的参数)。有点奇怪。

标签: c# unity3d unity5


【解决方案1】:

你确定你的游戏对象在加载新场景后仍然存在吗? 通常,在加载另一个场景时,所有游戏对象都会从场景中删除。

您可以通过加载场景添加剂来防止这种情况发生(将新场景的内容添加到当前场景的内容中)

SceneManager.LoadScene("your scene name", LoadSceneMode.Additive);

或通过防止删除您的特定游戏对象

GameObject.DontDestroyOnLoad(yourStartGameScriptHolder); // where yourStartGameScriptHolder is the GameObject(!), not the script reference

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多