【问题标题】:Unity3D - Problems after reloading scene via Application.LoadLevelUnity3D - 通过 Application.LoadLevel 重新加载场景后的问题
【发布时间】:2013-03-05 11:27:33
【问题描述】:

我有问题...

我的游戏中有四个场景:开场场景、选择玩家场景、实际游戏场景和游戏结束场景。

当我额外加载我的实际游戏场景时遇到了问题

Application.LoadLevel("Let's play the game!") 

这就是我离开这个场景的方式:

if(GUI.Button (new Rect (x, y, w, h), "Quit", buttonStyle))
{
   Application.Quit();
   Application.LoadLevel("Opening Screen");
}

当我第二次加载我想要的关卡时,相机应该会跟随第一个玩家。这没有发生。我提供了一个“重启”选项,这可以解决这个问题,但我不希望这个事件一开始就发生。

更严重的问题是动态加载的游戏对象。我收到“'GameObject' 已被破坏,但您仍在尝试访问它。”我不确定这是从哪里来的,因为我在任何地方都看不到我之前所说的“毁灭”。此外,当我在 Unity 中运行应用程序时,动态创建的对象确实出现在层次结构中。

我认为问题的根源在于相机故障,但我不确定如何修复它。

有人有什么建议吗?

【问题讨论】:

    标签: unity3d reload destroy scene


    【解决方案1】:

    听起来您需要确保调用 DontDestroyOnLoad 以在关卡加载之间将对象保留在内存中:

    DontDestroyOnLoad(gameObjectToPreserve);
    

    此外,您示例中的以下代码将在您的应用程序加载“打开屏幕”之前退出您的应用程序:

    if(GUI.Button (new Rect (x, y, w, h), "Quit", buttonStyle))
    {
       Application.Quit();
       Application.LoadLevel("Opening Screen");
    }
    

    如果您打算返回初始屏幕,请删除“Application.Quit()”行。在编辑器的预览模式下你不会看到这个问题,因为 Application.Quit() 在那里没有做任何事情。

    【讨论】:

    • 是的,删除 Application.Quit();这实际上会在 Unity 编辑器之外关闭您的游戏。
    • 你们速度很快!感谢有关 Application.Quit() 的警告。我开始评论一堆源代码并隔离了我的问题。我的相机游戏对象链接到一个脚本,该脚本在重新加载所需关卡时失败。显然,这个错误在整个关卡中造成了火车残骸效应。
    • 我已经解决了所有问题。我能够找到缺少对象验证的几个区域。这消除了“'GameObject'已被破坏,但您仍在尝试访问它”。关于相机,我有一个问题:对 GUI.* 的调用是否仅限于 OnGUI() 内部?我在引用 GUI.Button、GUI​​.Labels 等的 OnGUI() 内部进行调用。当所有这些 GUI.* 调用在 OnGUI() 内部进行时,相机异常消失。
    • 初始调用站点必须在 OnGUI 中,但您可以从 OnGUI 调用其他类中的其他方法,并在这些方法中执行 GUI.Button 或 GUI.Label 之类的操作。 From the forums.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多