【发布时间】:2015-11-19 15:40:53
【问题描述】:
我正在使用 Unity 开发游戏。游戏只有一个关卡,玩家赢/输后,我只想重新加载相同的场景。这是我正在使用的代码:
private void OnLevelFailed()
{
IsGameStarted = false;
Debug.Log("LEVEL FAILED");
Invoke("RestartLevel",5);
}
void RestartLevel()
{
Application.LoadLevel(Application.loadedLevelName);
}
在编辑器上运行此代码时,一切似乎都很好,并且场景按预期重新加载。但是,当我为 Android 构建游戏并在设备(LG G3)上运行它时,游戏只是冻结了。我使用adb logcat 查看任何异常或错误的日志,如果有任何异常或错误但没有运气。我还怀疑Invoke 调用是否导致了问题,并将其替换为简单的方法调用,但这也没有解决问题。
有人知道为什么会发生这种情况吗?
编辑:问题似乎是由我正在使用的预制件引起的,即ALPSVR。它是一个虚拟现实 SDK,允许您拥有独立于 Unity 自己的 VR 实现(支持一些 VR 设备和 GearVR,但不支持常规 Android 设备)的 VR 相机。
我尝试在重新加载之前从场景中销毁 VR 摄像机,但它再次没有解决问题。为什么场景中的某个 GameObject 会阻止 Application.LoadLevel 正常工作?
【问题讨论】:
-
你的 Time.timeScale = 0 吗?
-
如果您使用 Unit 4.x,则需要 Unity Pro,否则 ALPSVR 将无法工作。
-
@JeanLuc,我还没有在游戏中的任何地方碰过时间刻度。这会导致问题吗?
-
@Puneet 我正在使用 Unity 5.1。
-
是的,如果 timeScale 为 0,则 5 秒实际上永远不会过去,并且您的方法
RestartLevel未被调用