Unity Application.LoadLevel在Android设备上冻结游戏

时间:2015-08-25 19:26:56

标签: c# android unity3d

我正在使用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,允许您使VR摄像机独立于Unity自己的VR实现(支持某些VR设备和GearVR,但不支持常规Android设备)。

我尝试在重新加载之前从场景中摧毁VR摄像机但是它再次没有解决问题。为什么场景中的某个GameObject会阻止Application.LoadLevel正常工作?

1 个答案:

答案 0 :(得分:0)

您可能使用Application.LoadLevelAsync(Application.loadedLevelName);取得了成功。

如果这不起作用,请考虑创建第二个空白场景。当您的游戏关卡完成后,请致电Application.LoadLevel(Application.blankScene);,然后将该脚本放在该空白场景中的GameObject上:

public class LevelLoader : MonoBehaviour
    {
      void Start()
      {
        StartCoroutine(ReloadLevel());
      }

      IEnumerator ReloadLevel()
      {
        yield return Resources.UnloadUnusedAssets();
        Application.LoadLevel(Application.loadedLevelName);
      }