Unity Application.LoadLevel congela el juego en el dispositivo Android

Estoy desarrollando un juego usando Unity. El juego tiene un solo nivel y después de que el jugador gane / pierda, simplemente quiero volver a cargar la misma escena. Aquí está el código que estoy usando:

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

Cuando se ejecuta este código en el editor, todo parece estar bien y la escena vuelve a cargarse según lo previsto. Sin embargo, cuando construyo el juego para Android y lo ejecuto en un dispositivo (un LG G3), el juego simplemente se congela. Utilicé adb logcat para ver los loggings de cualquier exception o error si hubiera alguno pero no hubo suerte. También sospeché si la llamada Invoke estaba causando el problema y lo reemplacé simplemente con la llamada al método, pero eso tampoco solucionó el problema.

¿Alguien tiene alguna idea de por qué esto podría pasar?

Este es el comportamiento esperado de LoadLevel. Si no quieres que tu juego se congele mientras cargas la escena, testing LoadLevelAsync o LoadLevelAdditive.

No sé si sigues interesado, pero me encontré con el mismo problema y resolví una solución alternativa.

Crea una nueva escena, la usarás para cargar otras escenas para que un nombre de LoadingScene pueda hacer.

Dentro de esta escena, coloque un object de juego vacío y adjunte un script que use Application.LoadLevel(); dentro de su método Awake() , o Start() si lo prefiere.

Aquí hay un ejemplo:

 using UnityEngine; using System.Collections; public class LoaderOfScenes : MonoBehaviour { // Use this for initialization void Awake () { //Just load something and catch the null exception with a default scene. Application.LoadLevel(References.SceneToLoad == null ? "ProtoMenu" : References.SceneToLoad); } // Update is called once per frame void Update () { } } 

El truco es References.SceneToLoad .

Es solo una cadena estática almacenada en caching dentro de una class pública estática que usted hace.

Siempre que necesite cargar una escena, en lugar de usar Application.LoadLevel(); y pasando como parámetro el nombre de la escena que desea cargar, asigne ese valor a References.SceneToLoad y luego cargue la escena que carga escenas en su lugar.

Intenté esto con mis comstackciones y funcionó.

No sé por qué.

Este problema también puede ser causado por otros problemas.

  1. Intente cargar la escena con este código:

      Application.LoadLevel(Application.loadedLevel); 

    a veces, el nombre de nivel cargado genera problemas si la construcción es un binary dividido.

  2. Asegúrate de que el límite de tu log de adb esté configurado en más de 100k (mi sistema operativo mobile dispara muchos loggings internos debido a que los loggings de la unidad desaparecen de la list)

  3. Asegúrate de include la escena en tu compilation.

  4. Si nada funciona, duplique la escena en la carpeta de activos e intente cargar la escena duplicada, y compruebe si genera algún error.