A diferencia del sistema de actores tradicional de Unreal Engine, Scene Graph utiliza un sistema de entidades y componentes para definir los objetos en el mundo. Las entidades actúan como contenedores de componentes y otras entidades, y los componentes proporcionan relaciones con las entidades a las que están unidos. Crear un objeto de juego con Scene Graph implica partir de una entidad base y añadir datos y comportamientos mediante componentes. Cada componente aporta un nuevo comportamiento y, combinándolos, puedes construir objetos complejos que puedes reutilizar e iterar.
Fundamentos de la construcción
Para ilustrar este punto, echa un vistazo a la serie de postes de luz de la primera sección de la sala de la plantilla. Cada poste de luz es un prefabricado, o una colección de entidades y componentes guardados como un único objeto. El objeto de prefabricado comparte las características, el comportamiento, las propiedades y los atributos de las entidades y los componentes a partir de los que se crea. Para obtener más información sobre las entidades y los componentes, consulta el documento Cómo trabajar con entidades y componentes.
###Iteración a través de la creación de instancias
Los prefabricados son recursos, y esto te permite instanciar prefabricados en tus niveles mientras los editas o durante la jugabilidad. Cada vez que arrastres un prefabricado fuera del explorador de contenido o crees una copia usando código de Verse, estarás instanciando una nueva instancia de ese prefabricado de Scene Graph en el mundo.
Aunque cada instancia del Prefabricado tiene su propia memoria y sobrecarga de procesamiento, instanciar nuevos Prefabricados no duplica la memoria, ya que los recursos del Prefabricado se comparten entre instancias.
Aunque instanciar múltiples instancias del mismo objeto es algo potente, los prefabricados también proporcionan una forma útil de iterar rápidamente en un diseño. En el explorador de contenido, abre la carpeta LightPost. Esta carpeta almacena los recursos utilizados para crear el diseño final del prefabricado P_LightPost.
Cada poste de luz de la sala representa una parte de este prefabricado. A medida que avanzas por el pasillo, se añade un nuevo componente en cada paso, hasta que aterriza en el diseño prefabricado final.
El primer poste de luz es una configuración sencilla que consta de tres entidades: un poste de luz, un punto central y un farol. Cada una de estas tres entidades tiene un transform_component que determina dónde se encuentran en el nivel. Tanto la Entidad principal como la linterna tienen un componente mesh_component para hacerlas visibles y mostrar modelos para el poste de luz y la linterna, respectivamente. Están conectados por una entidad de pivote que representa la conexión entre la farola y la linterna.
El segundo poste de luz itera sobre el diseño original añadiendo una nueva entidad con un sphere_light_component como descendiente de la linterna, haciendo que esta brille.
Sin embargo, solo brillar no es muy interesante, por lo que la tercera publicación de luz añade un particle_system_component para simular polillas que vuelan alrededor de la entidad SphereLight para darle un toque visual.
Continuando, la cuarta instancia de poste de luz añade un simple_movement_component personalizado y un keyframe_movement_component personalizados a la entidad Pivot. Estos componentes funcionan juntos para simular el movimiento de la entidad y de cualquiera de sus descendientes, permitiendo que el farol se balancee hacia delante y hacia atrás.
Estos componentes usan Verse para determinar el camino que recorre el farol, la distancia que recorre el farol en esa ruta y la rotación del farol para imitar el viento que sopla la luz. El componente de movimiento de fotogramas clave crea un movimiento suave y continuo basado en las coordenadas de simple_movement_component.
Por último, la última instancia del poste de luz añade un Lantern_interaction_component personalizado de Verse al poste de luz, así como un interactable_component a la linterna. Cuando el jugador se acerca al farol e interactúa con él, el lantern_interaction_component enciende y apaga el farol habilitando y deshabilitando cada light_component y particle_system_component en todo el poste de luz.
Anulaciones
Cuando instancias un Prefabricado, comienza con los mismos valores predeterminados que la definición del Prefabricado desde la que lo instanciaste. Pero, ¿y si quieres cambiar un aspecto concreto de una de tus instancias prefabricadas? Tal vez quieras una luz de otro color, o un poste de metal en lugar de un poste de luz de madera. Aquí es donde entran en juego las sustituciones.
Las anulaciones te permiten anular los valores en las instancias de una clase de Prefabricado para personalizar cada instancia sin cambiar el Prefabricado principal. Cuando realizas cambios en las opciones de un componente anidado en una instancia de prefabricado, estos cambios anulan las opciones del prefabricado principal y afectan a cómo actúa la entidad en ese nivel de componente solo para esa instancia.
Se pueden anular y cambiar las instancias individuales de Prefabricados para crear variedad en la escena. Si, en cambio, quieres propagar los cambios a todas las instancias del prefabricado, puedes utilizar el editor de prefabricados para reflejar esos cambios en todos los prefabricados de la escena.
Funcionalidad de Verse en Scene Graph
Scene Graph es un sistema nativo de Verse, lo que te permite aprovechar ambos de muchas formas potentes. Los prefabricados que creas en tu proyecto se exponen como clases de recursos en Verse a través de tu archivo Assets.digest.verse y puedes hacer referencia a ellos en el código tanto en componentes Verse como en dispositivos Verse.
También puedes utilizar Verse para consultar entidades y componentes individuales de tu escena. La función GetComponents() te permite obtener componentes específicos en función de su tipo, y GetEntities() te permite devolver todas las entidades subordinadas de un elemento principal concreto. También puedes buscar hacia arriba y hacia abajo en la jerarquía de Scene Graph para encontrar entidades descendientes y antepasadas. El Prefabricado P_LightPost utilizado en esta plantilla utiliza Verse para crear el movimiento de balanceo del farol y su interactividad.
Para obtener más información sobre la creación de objetos de juego funcionales, pasa a la siguiente sección, Movimiento e interacción.
Movimiento e interacción
Más información sobre cómo añadir movimientos a Entidades crea objetos de juego funcionales con un componente Verse y el componente de movimiento de fotograma clave.