A diferencia del sistema de actores tradicional de Unreal Engine, Scene Graph utiliza un sistema de entidades y componentes para definir los objetos del entorno. Las entidades actúan como contenedores de componentes y otras entidades, y los componentes establecen relaciones con las entidades a las que están vinculados. La creación de 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, al combinarlos, puedes crear objetos complejos que puedes reutilizar e iterar.
Conceptos básicos de construcción
Para ilustrar este punto, echa un vistazo a la serie de postes de luz en la primera sección de la sala de plantillas. Cada poste de luz es un prefabricado, o una colección de entidades y componentes guardados como un único objeto. El objeto prefabricado comparte las características, el comportamiento, las propiedades y los atributos de las entidades y los componentes a partir de los que se ha creado. Para obtener más información sobre las entidades y los componentes, consulta el documento Cómo trabajar con entidades y componentes.
Iteración por instancias
Los prefabricados son recursos, lo que te permite instanciarlos en tus niveles mientras los editas o durante el juego. Cada vez que arrastras un prefabricado desde el explorador de contenido o creas una copia con código de Verse, estás instanciando una nueva instancia de ese prefabricado de Scene Graph en el entorno.
Si bien cada instancia del prefabricado tiene su propia memoria y sobrecarga de procesamiento, la instanciación de nuevos prefabricados no duplica la memoria, ya que los recursos usados en un prefabricado se comparten entre las instancias.
Si bien instanciar múltiples instancias del mismo objeto es muy útil, 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 del pasillo representa una parte de este prefabricado. A medida que avanzas por el pasillo, se añade un nuevo componente en cada paso, hasta llegar al diseño prefabricado final.
El primer poste de luz es una configuración sencilla que consta de tres entidades: un poste de luz, un pivote 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 base como el farol tienen un mesh_component para hacerlas visibles y mostrar modelos para el poste de luz y el farol respectivamente. Están conectados por una entidad Pivot que representa la conexión entre el poste de luz y el farol.
La segunda publicación de luz itera sobre el diseño original al añadir una nueva entidad con un sphere_light_component como descendiente del farol, lo que hace que brille.
Sin embargo, solo brillar no es muy interesante, por lo que el tercer poste de luz añade un componente particle_system_component para simular polillas volando alrededor de la entidad SphereLight y darle un toque visual.
Por otra parte, la cuarta instancia de poste de luz añade tanto un simple_movement_component personalizado como un keyframe_movement_component a la entidad Pivot. Estos componentes funcionan juntos para simular el movimiento de la entidad y cualquiera de sus descendientes, lo que permite que el farol se balancee hacia adelante y hacia atrás.
Estos componentes usan Verse para determinar el camino que recorre el farol, la distancia que recorre el farol en ese camino y la rotación para simular 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 al farol. Cuando el jugador se acerca al farol e interactúa con él, el lantern_interaction_component enciende y apaga el farol al habilitar y deshabilitar cada light_component y particle_system_component en todo el poste de luz.
Anulaciones
Cuando se instancia un prefabricado, este comienza con los mismos valores predeterminados que la definición del prefabricado a partir del cual se instanció. Pero ¿qué pasa si quieres cambiar un aspecto concreto de una de tus instancias prefabricadas? Quizás quieras una luz de otro color, o un poste metálico en lugar de uno de madera. Aquí es donde entran en juego las anulaciones.
Las anulaciones te permiten cambiar los valores de las instancias de una clase prefabricada para personalizar cada instancia sin cambiar el prefabricado base. Cuando se realizan cambios en las opciones de un componente anidado en una instancia prefabricada, estos cambios anulan las opciones del prefabricado base y afectan al comportamiento de la entidad en ese nivel de componente solo para esa instancia.
Se pueden realizar anulaciones y cambios en instancias prefabricadas individuales para crear variedad en la escena. Si, por el contrario, quieres propagar los cambios a todas las instancias del prefabricado, puedes usar 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 juntos de muchas formas potentes. Los prefabricados que creas en el 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 de Verse como en dispositivos de Verse.
También puedes usar Verse para consultar entidades y componentes individuales en tu escena. La función GetComponents() te permite obtener componentes específicos según su tipo, y GetEntities() te permite devolver todas las entidades derivadas de una base en particular. También puedes buscar hacia arriba y hacia abajo en la jerarquía del Scene Graph para encontrar entidades descendientes y antecesoras. El prefabricado P_LightPost de esta plantilla usa Verse para crear el movimiento oscilante del farol y su interactividad.
Para obtener más información sobre cómo crear objetos de juego funcionales, continúa con la siguiente sección, Movimiento e interacción.
Movimiento e interacción
Aprende cómo añadir movimientos a las entidades crea objetos de juego funcionales con un componente de Verse y el componente de movimiento de fotogramas clave.