Recarga detallada de dominios y recarga de escenas de la arquitectura Unity

1. Unity ingresa al modo de ejecución, incluidas las siguientes etapas principales

  • Copia de seguridad de la escena actual: esto solo sucede después de que se haya modificado la escena. De esta forma, al salir del modo de reproducción, Unity restaura la escena al estado en el que se encontraba antes de que se iniciara el modo de reproducción.
  • Recarga de dominio: restablece el estado del script recargando el dominio del script.
  • Recarga de escena: restablece el estado de la escena recargando la escena.
  • Actualizar escena: esto ocurre dos veces, una vez sin renderizar y otra con renderizado.

2. ¿Qué omitirá Unity cuando la recarga de dominio y la recarga de escena estén deshabilitadas?

La tarea combinada de recarga de dominio y recarga de escena restablece el dominio del script y simula el comportamiento de inicio de una aplicación que se ejecuta en el reproductor. Unity omite estos pasos si están deshabilitados en la configuración del proyecto.

La siguiente imagen brinda detalles sobre los eventos exactos que Unity omite cuando la recarga de dominio y la recarga de escena están deshabilitadas. El azul indica eventos que Unity omite cuando Domain Reload está deshabilitado y el verde indica eventos que Unity omite cuando Scene Reload está deshabilitado.
inserte la descripción de la imagen aquí


3. ¿Qué ejecuta Unity cuando tanto la recarga de escena como la recarga de dominio están habilitadas?


Con la recarga de escena y la recarga de dominio habilitadas, aquí hay una lista completa de todos los procesos y eventos que Unity ejecuta cuando ingresa al modo de reproducción:


1. Genere el evento AssemblyReloadEvent beforeAssemblyReload.

2. Detenga el dominio C#:
 a. Llame a OnDisable() en todos los ScriptableObjects y MonoBehaviours.
 b. Unity espera a que se completen todas las operaciones asincrónicas.

3. Serialice el estado de todos los MonoBehaviour y ScriptableObject.
 a. Llame a OnBeforeSerialize().
 b. Serialice todos los valores de campo públicos y privados, excepto aquellos marcados con [NonSerialized].

4. Los contenedores administrados están desconectados de los objetos nativos de Unity.

5. Vuelva a cargar el subdominio de Unity:
 a. Descargue el dominio Mono:
  i. Genere el evento AppDomain.DomainUnload.
  ii) Destruir el subdominio de Unity
    1. Llame a GC y finalizador.
    2. Terminar el hilo.
    3. Elimine toda la información JIT.
 b. Cree un nuevo subdominio de Unity.

6. Cargue el ensamblaje:
 a. Cargue el ensamblaje del sistema.
 b. Cargue el ensamblado de Unity.
 c. Cargue el ensamblado de usuario.

7. Inicialice el contexto de sincronización.


8. Restaurar el estado del script.
 a. Vuelva a crear las partes programables de todos los objetos de Unity.
  i. Llame al constructor y asigne valores predeterminados a las estadísticas.
 b. Deserializar el estado de todos los objetos de Unity:
 i. Restaurar el estado serializado de todos los objetos de Unity.
  1. Genere el evento OnAfterDeserialize.
 ii. Llamar a OnValidate().
 iii) Para secuencias de comandos que utilizan el atributo [ExecuteInEditMode]:
  1. Llame a OnEnable().
  2. Llame a OnDisable().
  3. Llame a OnDestroy().

9. Llame al método que contiene InitializeOnLoad e InitializeOnLoadMethod.

10. Llame a AssemblyReloadEvent después deAssemblyReload.

Supongo que te gusta

Origin blog.csdn.net/a_codecat/article/details/127869484
Recomendado
Clasificación