ECS versión abreviada 5: escenas de horneado y entidades

Tabla de contenido

 

Escenas de horneado y entidades.

Creación y edición de subescenas.

Accediendo a datos en un panadero

Cargando y descargando escenas de entidades.


Escenas de horneado y entidades.

Hornear es el proceso de convertir  subescenas  en  escenas de entidad  , utilizando  panaderos y  sistemas de horneado :

  • Una  subescena  es un activo de escena de Unity que está integrado en otra escena mediante  SubScene  MonoBehaviour.
  • Una  escena de entidad  es un conjunto serializado de entidades y componentes que se pueden cargar en tiempo de ejecución.
  • Un  panadero  es una clase que extiende  Baker<T> , donde T es un MonoBehaviour. Un MonoBehaviour con Baker se denomina  componente de creación .
  • Un  sistema de horneado  es un sistema normal marcado con el  [WorldSystemFilter(WorldSystemFilterFlags.BakingSystem)] atributo. (Los sistemas de horneado son completamente opcionales y generalmente solo se requieren para casos de uso avanzados).

Crear una escena secundaria se realiza en unos pocos pasos principales:

  1. Para cada GameObject de la escena secundaria, cree una entidad correspondiente
  2. Se ejecuta el panadero de cada componente de creación en la escena secundaria. Cada panadero puede leer el componente de creación y agregar componentes a la entidad correspondiente.
  3. 执行sistemas de horneado. Cada sistema puede leer y modificar las entidades creadas de cualquier forma: establecer componentes, agregar componentes, eliminar componentes, crear entidades adicionales o destruir entidades. 

 Cuando la subescena cambie, se volverá a hornear:

  1. Sólo se volverán a ejecutar los panaderos que lean los componentes de creación modificados.
  2. sistemas de horneado 会 reejecutados 
  3. Las entidades en vivo en el modo Editar o Reproducir se actualizan para que coincidan con los resultados de la cocción. (Esto es posible porque el horneado rastrea la correspondencia de las entidades horneadas con las entidades vivas).

Creación y edición de subescenas.

La casilla de verificación indica si se puede editar. Cuando la escena esté marcada y abierta, se cargarán los recursos correspondientes. Si no estás en la escena, puedes desmarcarla para reducir el consumo.

Accediendo a datos en un panadero

El componente de creación de Baker se puede obtener automáticamente, pero es necesario agregar otros datos a las dependencias antes de poder acceder a él:

método panadero Descripción
ObtenerComponente<T>() Accede a cualquier componente de cualquier GameObject en la Sub Escena.
Depende de() Realiza un seguimiento de un activo para esto  Baker.
ObtenerEntidad() Devuelve la identificación de una entidad creada en la escena secundaria o creada a partir de una casa prefabricada. (La entidad aún no estará completamente preparada, por lo que no debe intentar leer ni modificar los componentes de la entidad).

Cargando y descargando escenas de entidades.

Para la carga de streaming, la escena se divide en varias secciones  , identificadas por índice. La entidad a la que pertenece cada sección está determinada por  el  componente compartido SceneSection. De forma predeterminada, una entidad pertenece a la sección 0, pero esto se puede cambiar configurándolo  SceneSection durante el horneado.

⚠ IMPORTANTE
Durante el proceso de horneado, las entidades en una subescena solo pueden hacer referencia a otras entidades en la misma sección o sección 0 (la sección 0 siempre se carga antes que otras secciones y solo se descargará cuando se descargue la escena misma).

Cuando se carga una escena, está representada por una entidad de metadatos, y cada una de sus partes también está representada por una entidad. Una sola sección implementa la carga y descarga operando el  componente RequestSceneLoaded de la entidad  . Cuando el componente cambia, SceneSectionStreamingSystem recibirá  SceneSystemGroup un llamar de vuelta.

SceneSystem   proporciona métodos estáticos para cargar y descargar escenas de entidades , no escenas de secciones:

SceneSystem método Descripción
CargaEscenaAsync() Inicia la carga de una escena. Devuelve una entidad que representa la escena cargada.
CargaPrefabAsync() Inicia la carga de una casa prefabricada. Devuelve una entidad que hace referencia a la casa prefabricada cargada.
Descargar escena() Destruye todas las entidades de una escena cargada.
IsSceneLoaded() Devuelve verdadero si se carga una escena.
IsSectionLoaded() Devuelve verdadero si se carga una sección.
ObtenerEscenaGUID() Devuelve el GUID que representa un recurso de escena (especificado por su ruta de archivo).
Obtener ruta de escena() Devuelve la ruta de un recurso de escena (especificada por su GUID).
ObtenerEntidadEscena() Devuelve la entidad que representa una escena (especificada por su GUID).
⚠ IMPORTANTE
La carga de la escena y la sección de la entidad siempre es asincrónica y no hay garantía de cuánto tiempo llevará cargar los datos después de una solicitud. En la mayoría de los casos, el código debe verificar si los datos específicos cargados desde la escena existen, en lugar de verificar la carga. estado de la escena en sí. Este enfoque evita vincular el código a un escenario específico.

Supongo que te gusta

Origin blog.csdn.net/qq_37672438/article/details/131397532
Recomendado
Clasificación