En este momento estás viendo DontDestroyOnLoad no funciona en la escena?

 – Unity

DontDestroyOnLoad no funciona en la escena? – Unity

DontDestroyOnLoad no funciona en la escena?

– UnityAssets3Free

hola , por aqui juansito y hoy os traigo
esta pregunta

Necesito aplicar DontDestroyOnLoad on Scene, ¿es posible?

Necesito no perturbar la escena ingresando a otras escenas también. aquí estoy enviando un correo electrónico, cada vez que hago clic en el botón Enviar, irá a la autenticación del servidor de correo electrónico, en este momento mi escena inactiva significa que no responderé nada hasta que vuelva a la respuesta del servidor de correo electrónico, así que en ese momento muestro una barra de carga en mi escena . esto no es un proceso. toda la escena está congelada hasta que llegó la respuesta del servidor de correo, entonces, ¿cómo resolver esto?

 void  Awake()

      DontDestroyOnLoad(this.gameObject);

4 respuestas 4

Después de leer tantas respuestas falsas, finalmente encontré la respuesta en un foro de Unity. DontDestroyOnLoad SOLO funciona si el objeto del juego en cuestión está en un «nivel raíz», es decir, justo debajo de la escena, no anidado debajo de ningún otro objeto. Esto no se menciona en ninguna parte de la documentación.

Al cargar un nuevo nivel, scenetodos los objetos del juego de la escena anterior son destruidos por Unity.

Si desea proteger un Game Object, puede utilizar la función.

DontDestroyOnLoad(gameObject);

Es importante notar que cuando dices: this.gameObject estás apuntando a más o menos lo mismo, resulta que this apunta directamente al script adjunto a este gameObject. Así que no necesitas el this parte, solo gameObject vas a hacer.

Idealmente podrías proteger ese gameObject dentro void Awake()

void Awake()

   DontDestroyOnLoad(gameObject);

El código anterior evitará que Unity destruya ese gameObject a menos que su juego se cierre por completo o en un momento posterior llame Destroy() en él. Eso significa que puedes cambiar de escena a escena y el gameObject sobrevivirá. Sin embargo, si regresa a la escena que crea este gameObject que está protegiendo, puede tener problemas si no tiene una lógica que le impida proteger un segundo, un tercero o muchos de estos gameObjects.

tu segunda preguntasi entiendo bien: desea enviar un correo electrónico cuando cambia de escena, pero su barra de progreso no avanza al cambiar de escena, simplemente permanece allí, estática.

Si ese es el caso, entonces tu problema está en Application.LoadLevel(sceneName); Si tiene la versión gratuita de Unity, deberá idear su propia forma creativa de mostrar esta barra de progreso, porque Application.LoadLevel() detendrá todo hasta que te lleve a la nueva escena.

No entiendo completamente lo que estás diciendo. Pero debido a que en su contexto, this en representa muy probablemente un Monobehaviourprueba lo siguiente:

void Awake() 
    DontDestroyOnLoad(this.gameObject);

o

void Awake() 
   DontDestroyOnLoad(gameObject);

Para ver http://docs.unity3d.com/Documentation/ScriptReference/Object.DontDestroyOnLoad.html

Le recomiendo que use una rutina, con la declaración de ‘rendimiento’, consulte estos documentos clase WWWque también implica escribir código para manejar la espera de una respuesta de la web, sin bloquear su programa Unity3d

Las corrutinas son bastante poderosas si está trabajando con tareas que toman más de un cuadro o dos. Richard Fine (AltDevBlog) publicó una descripción muy detallada de lo que son y cómo usarlos, que recomiendo encarecidamente.

nota: si aun no se resuelve tu pregunta por favor dejar un comentario y pronto lo podremos de nuevo , muchas gracias

eso es todo,espero que te funcione

Deja una respuesta