2015-08-25 4 views
2

Я разрабатываю игру, используя Unity. Игра имеет один уровень и после того, как игрок побеждает/проигрывает, я просто хочу перезагрузить ту же сцену. Вот код, который я использую:Unity Application.LoadLevel замораживает игру на Android-устройстве

private void OnLevelFailed() 
{ 
    IsGameStarted = false; 
    Debug.Log("LEVEL FAILED"); 
    Invoke("RestartLevel",5); 
} 

void RestartLevel() 
{ 
    Application.LoadLevel(Application.loadedLevelName); 
} 

При запуске этого кода в редакторе все кажется прекрасным, и сцена перезагружается по назначению. Однако, когда я создаю игру для Android и запускаю ее на устройстве (LG G3), игра просто замерзает. Я использовал adb logcat, чтобы просмотреть журналы любых исключений или ошибок, если бы они были, но не повезло. Я также подозревал, что вызов Invoke вызывает проблему и заменил ее просто вызовом метода, но это также не решило проблему.

У кого-нибудь есть идеи, почему это может случиться?

EDIT: Кажется, проблема вызвана сборкой, которую я использую, а именно ALPSVR. Это SDK виртуальной реальности, который позволяет вам иметь VR-камеры независимо от собственной реализации VR Unity (которая поддерживает некоторые устройства VR и GearVR, но не обычные устройства Android).

Я попытался уничтожить камеру VR с места, прежде чем перезагружать ее, но снова это не решило проблему. Почему некоторый объект GameObject внутри сцены не позволяет программе Application.LoadLevel работать правильно?

+0

Ваш Time.timeScale = 0? – JeanLuc

+0

Если вы используете Unit 4.x, вам нужен Unity Pro, иначе ALPSVR не будет работать. – Puneet

+0

@JeanLuc, я не касался timeScale нигде внутри игры. Это может вызвать проблему? – halileohalilei

ответ

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); 
     } 
+0

К сожалению, это не сработает. Похоже, я тоже не могу загрузить какую-либо другую сцену. Однако, если я начну с другой сцены и использую ваш код для загрузки моей основной сцены, он работает. На моей главной сцене должно быть что-то не так, но я понятия не имею, что. – halileohalilei

+0

Если вы начинаете с этой пустой сцены, а затем загружаете основную сцену, она все еще работает после того, как ваш уровень заканчивается, и вы снова станете пустой> основной сценой? Если это так, это может быть подходящим решением. В общем, вы все равно будете это делать, потому что вам нужна сцена меню. Итак, зайдите в Меню> Главная> Пусто> Главная> Пусто> Главная и т. Д. – Matt

+0

Нет, это не так. Я не могу перейти от основной сцены к любой другой сцене. Вы можете увидеть мое изменение выше для получения дополнительной информации, которую я обнаружил о проблеме. – halileohalilei

Смежные вопросы