我正在使用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正常工作?
答案 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);
}