Componentes básicos

El World Explorer admite una lista de componentes básicos que comparten su definición con las escenas, proporcionando soporte integrado para posicionamiento, animación, medios, consultas del estado del mundo

Hay cinco tipos de componentes:

  1. Componentes de objeto añaden propiedades visuales y físicas a las Entities.

  2. Componentes de juego pueden solicitar acciones y recibir información del motor del juego.

  3. Componentes de medios pueden mostrar imágenes y reproducir sonidos.

  4. Componentes de área alteran el comportamiento de las Entities en zonas específicas.

  5. Componentes de UI permiten que las escenas rendericen interfaces flotantes.

Excepto por Transform, que se especifica en detalle a continuación, el estado de todos los componentes se serializa usando protocol buffers. Puedes seguir el enlace en cada título para ver la definición completa.

Componentes de objeto

Los componentes más comunes son aquellos que agregan propiedades visuales y físicas a una Entity. Pueden utilizarse para posicionar, redimensionar, pintar y añadir colisión a objetos del juego.


Transform ↗ specarrow-up-right

Agrega posición, rotación y escala a una entity.

Este componente es, con diferencia, el más utilizado y el que más se actualiza durante la vida de una escena. Debido a esto, Transform no se serializa usando protocol buffers, y en su lugar se empaqueta en una estructura personalizada.

Transform tiene un tamaño de 44 bytes, con esta disposición exacta:

.-----------------------.-------------------------------.-----------------------.-----------------.
|   x   |   y   |   z   |   x   |   y   |   z   |   w   |   x   |   y   |   z   | parent (uint32) |
'-----------------------'-------------------------------'-----------------------'-----------------'
╵  position (3x float)  ╵      rotation (4x float)      ╵   scale (3x float)    ╵

Este enfoque permite al runtime (especialmente en entornos de código de bajo nivel) evitar pasos intermedios de serialización y deserialización. La memoria donde reside una Transform puede ser copiada, compartida y apuntada directamente.

Las coordenadas pueden ser fraccionarias y, por tanto, usan un número de punto flotante de 4 bytes.

El parent el campo indica que esta Entity debe posicionarse en relación con otra, identificada por su ID.

Dado que el valor nulo para parent también es el RootEntityarrow-up-right ID (0), cualquier Transform es relativo a él por defecto.

Por protocolo, Transform debe serializarse en orden de bytes big-endian.


MeshRenderer ↗ fuentearrow-up-right

Proporciona comportamiento básico de renderizado para una Entity.

Se puede configurar para renderizar un plano, una esfera, un cubo o un cilindro. Para renderizar formas 3D arbitrarias, usa GltfContainer.


MeshCollider ↗ fuentearrow-up-right

Proporciona comportamiento básico de colisión y detección del puntero del ratón para una Entity.

Se puede configurar para comportarse como un plano, una esfera, un cubo o un cilindro. Para tener una malla de colisión personalizada, usa GltfContainer.


Material ↗ fuentearrow-up-right

Establece la textura, iluminación, color y propiedades de transparencia de una Entity que también tiene el MeshRenderer componente.

Es una estructura compleja diseñada para cubrir todos los casos comunes, pero cada campo tiene un valor predeterminado razonable y puede dejarse sin especificar.

Para personalizar completamente las propiedades visuales de una Entity, usa GltfContainer.


GltfContainer ↗ fuentearrow-up-right

Adjunta un modelo 3D a esta Entity, dado el ruta del archivoarrow-up-right de un .gltf asset en el manifiesto de la escena.

Dado que el modelo tiene sus propias meshes y materials, este componente anula cualquier comportamiento de MeshRenderer, MeshCollider y Material.


Billboard ↗ fuentearrow-up-right

Hace que una Entity reoriente automáticamente su Transform para mirar hacia la cámara. Como indica el nombre, se usa para mostrar carteles dentro del juego y con frecuencia se combina con TextShape.

Afecta a todas las direcciones por defecto, pero puede configurarse para rotar solo en un eje.


Animator ↗ fuentearrow-up-right

Define una o más animaciones que pueden aplicarse simultáneamente a una entity.

Las escenas pueden establecer el estado del componente para personalizar, reproducir y hacer transiciones entre animaciones, así como leerlo para comprobar qué animaciones están disponibles o se están reproduciendo actualmente.


AvatarAttach ↗ fuentearrow-up-right

Indica que la posición de una Entity debe seguir un punto de anclaje particular en el cuerpo de un avatar.

Puede afectar a cualquier avatar, no solo al del jugador, estableciendo un user ID.


TextShape ↗ fuentearrow-up-right

Renderiza texto en la posición de una Entity, dada por su Transform.

Es altamente configurable, soportando parámetros como tamaño, margen, padding, color, sombra y más.


Visibility ↗ fuentearrow-up-right

Establece si una Entity es visible (por defecto) o invisible.

Los objetos invisibles siguen existiendo y exhibirán el comportamiento de cualquier otro componente adjunto.


AvatarShape ↗ fuentearrow-up-right

Contiene información sobre el avatar del jugador, incluyendo su body shape, colores, wearables y estado transitorio.

Este componente se adjunta a entities en la avatar scenearrow-up-right.

Componentes de juego

Algunos componentes básicos pueden ser usados por la escena y el runtime para intercambiar información. Aprovechan el ECS synchronization mechanismarrow-up-right para garantizar consistencia y orden en cualquier cambio de estado o eventos.


CameraMode ↗ fuentearrow-up-right

Puede utilizarse para determinar si el jugador tiene una vista en primera persona o en tercera persona.


PointerLock ↗ fuentearrow-up-right

Puede utilizarse para determinar si el puntero del ratón sigue automáticamente el punto de enfoque de la cámara (locked), o puede moverse libremente por la pantalla (unlocked).

Se adjunta al CameraEntityarrow-up-right, y su estado puede leerse (pero no escribirse) desde la escena.


PointerEvents ↗ fuentearrow-up-right

Muestra feedback visual cuando el puntero hace clic o se posa sobre una Entity.


PointerEventsResult ↗ fuentearrow-up-right

Contiene información sobre entradas recientes del jugador, incluidas teclas y acciones del puntero.

Se adjunta al RootEntity, y actualizado por el runtime con cualquier evento nuevo en cada frame.


Raycast ↗ fuentearrow-up-right

Puede adjuntarse a una Entity para solicitar un raycast al motor del juego. El RaycastResult componente se adjuntará más tarde a la misma entity.

Se puede configurar el origen, la dirección y la longitud máxima del rayo.


RaycastResult ↗ fuentearrow-up-right

Adjuntado por el runtime a Entities que tienen un Raycast componente con resultados pendientes.

Contiene información sobre el rayo original e identifica las Entities que fueron alcanzadas.

Componentes de medios

Las escenas pueden adjuntar componentes especiales para mostrar imágenes, reproducir video o sonidos.


AudioSource ↗ fuentearrow-up-right

Reproduce un clip de audio empaquetado con la escena, dada la ruta del archivo en su manifiestoarrow-up-right.

El sonido se origina en la posición de la entity asociada. Su pitch, volumen y comportamiento de loop se pueden configurar, y puede leerse el estado del reproductor de audio.

circle-info

En preparación para futuras actualizaciones, el campo en AudioSource se llama audio_clip_url, pero en la versión actual del protocolo en realidad es la ruta definida en el manifiesto.


AudioStream ↗ fuentearrow-up-right

Similar a AudioSource, pero el audio se transmite en tiempo real desde una URL externa.

A pesar de estar adjunto a una entity particular, el sonido no se ve afectado por su posición. Se puede configurar su volumen, y puede leerse el estado del reproductor de audio.


NftShape ↗ fuentearrow-up-right

Muestra un NFT asociado a un asset de imagen o video.

Renderiza un canvas 2D con un marco decorativo configurable.

Componentes de área

Estos componentes permiten que las escenas modifiquen el comportamiento por defecto de las Entities dentro de límites especificados.


AvatarModifierArea ↗ fuentearrow-up-right

Cambia el comportamiento de los avatares dentro de un espacio centrado alrededor de una Entity.

Se define con un vector de tamaño 3D y puede afectar si los avatares son visibles o clicables. Avatares específicos pueden excluirse de este efecto dado el user ID de su usuario.


CameraModeArea ↗ fuentearrow-up-right

Cambia el modo de cámara (1st-person o 3rd-person) dentro de un espacio centrado alrededor de una Entity.

Se define con un vector de tamaño 3D y un camera mode deseado.

Componentes de UI

Los siguientes componentes se usan para crear interfaces gráficas que flotan sobre el mundo del juego.

Normalmente se adjuntan a conjuntos de Entities que tienen jerárquicos UiTransform componentes, relacionados entre sí vía el parent attribute.

Por ejemplo, una ventana de opciones flotante podría ser una Entity con un UiTransform y un UiBackground componente, más una Entity con un hijo UiTransform y un UiDropdown.


UiTransform ↗ fuentearrow-up-right

Describe el tamaño, posicionamiento, margen y padding de un componente de UI.

Se basa en el modelo flexbox y es altamente personalizable.


UiBackground ↗ fuentearrow-up-right

Describe un color o texture para usar como fondo en una Entity de UI.


UiDropdown ↗ fuentearrow-up-right

Define una lista de opciones mutuamente excluyentes para mostrarse en un widget dropdown.


UiDropdownResult ↗ fuentearrow-up-right

Contiene el valor seleccionado de un UiDropdown, establecido por el runtime y leído por la escena.


UiInput ↗ fuentearrow-up-right

Define un widget de entrada de texto, con margen para personalización.


UiInputResult ↗ fuentearrow-up-right

Contiene el valor de texto de un UiInput, establecido por el runtime y leído por la escena.


UiText ↗ fuentearrow-up-right

Define una vista de texto simple, con margen para personalización.


Última actualización