For the complete documentation index, see llms.txt. This page is also available as Markdown.

Basic Components

O World Explorer oferece suporte a uma lista de components básicos que compartilham sua definição com scenes, fornecendo suporte integrado para posicionamento, animação, media e consultas de estado do world

Existem cinco tipos de components:

  1. Components de objeto adicionam propriedades visuais e físicas às Entities.

  2. Components de jogo podem solicitar actions e receber informações do game engine.

  3. Components de media podem exibir images e reproduzir sounds.

  4. Components de área alteram o comportamento de Entities em zonas específicas.

  5. Components de UI permitem que scenes renderizem interfaces flutuantes.

Exceto por Transform, que é especificado em detalhe abaixo, o estado de todos os components é serializado usando protocol buffers. Você pode seguir o link em cada título para ver a definição completa.

Components de objeto

Os components mais comuns são aqueles que anexam propriedades visuais e físicas a uma Entity. Eles podem ser usados para posicionar, redimensionar, pintar e adicionar collision a objetos in-game.


Transform ↗ spec

Adiciona posição, rotação e escala a uma entity.

Este component é, de longe, o mais usado e frequentemente atualizado ao longo do ciclo de vida de uma scene. Por isso, Transform não é serializado usando protocol buffers e, em vez disso, é empacotado em uma estrutura customizada.

Transform tem um tamanho de 44 bytes, com este layout exato:

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

Essa abordagem permite que o runtime (especialmente em ambientes de código de baixo nível) evite etapas intermediárias de serialização e desserialização. A memória onde um Transform reside pode ser copiada, compartilhada e apontada diretamente.

As Coordinates podem ser fracionárias e, portanto, usam um número de ponto flutuante de 4 bytes.

O parent campo indica que esta Entity deve ser posicionada em relação a outra, identificada pelo seu ID.

Como o valor nulo para parent é também o RootEntity ID (0), qualquer Transform é relativa a ele por padrão.

Por protocolo, Transform deve ser serializado em ordem de bytes big-endian.


MeshRenderer ↗ source

Fornece comportamento básico de renderização para uma Entity.

Pode ser configurado para renderizar um plano, uma esfera, um cubo ou cilindro. Para renderizar formas 3D arbitrárias, use GltfContainer.


MeshCollider ↗ source

Fornece comportamento básico de collision e detecção do ponteiro do mouse para uma Entity.

Pode ser configurado para se comportar como um plano, uma esfera, um cubo ou cilindro. Para ter uma collision mesh personalizada, use GltfContainer.


Material ↗ source

Define as propriedades de texture, lighting, cor e transparência de uma Entity que também tenha o MeshRenderer component.

É uma estrutura complexa projetada para cobrir todos os casos comuns, mas cada campo tem um valor padrão razoável e pode ser deixado não especificado.

Para personalizar completamente as propriedades visuais de uma Entity, use GltfContainer.


GltfContainer ↗ source

Anexa um modelo 3D a esta Entity, dado o caminho do arquivo de um .gltf asset no manifest da scene.

Como o modelo tem seus próprios meshes e materials, este component substitui qualquer comportamento de MeshRenderer, MeshCollider e Material.


Billboard ↗ source

Faz com que uma Entity reoriente automaticamente seu Transform para ficar de frente para a camera, ou opcionalmente para outra Entity referenciada via target_entity. Como o nome indica, é usado para exibir billboards in-game e frequentemente combinado com TextShape.

Ele afeta todas as direções por padrão, mas pode ser configurado para girar apenas em um eixo. Se a target Entity referenciada não existir, a reorientação é suspensa até que ela exista.


Animator ↗ source

Define uma ou mais animations que podem ser aplicadas simultaneamente a uma Entity.

As scenes podem definir o estado do component para customizar, reproduzir e fazer transição entre animations, além de lê-lo para verificar quais animations estão disponíveis ou sendo reproduzidas no momento.


AvatarAttach ↗ source

Indica que a position de uma Entity deve seguir um ponto de ancoragem específico no corpo de um avatar.

Pode afetar qualquer avatar, não apenas o do jogador, definindo um user ID.


TextShape ↗ source

Renderiza texto na position de uma Entity, dada por sua Transform.

É altamente configurável, com suporte a parâmetros como size, margin, padding, color, shadow e mais.


Visibility ↗ source

Define se uma Entity está visível (o padrão) ou invisível.

Objetos invisíveis ainda existem e exibem o comportamento de quaisquer outros components anexados.


AvatarShape ↗ source

Contém informações sobre o avatar do jogador, incluindo seu body shape, colors, wearables e estado transitório.

Este component é anexado a entities no avatar scene.

Components de jogo

Alguns components básicos podem ser usados pela scene e pelo runtime para trocar informações. Eles aproveitam o mecanismo de sincronização ECS para garantir consistência e ordenação para quaisquer alterações de state ou events.


CameraMode ↗ source

Pode ser usado para determinar se o jogador tem uma visão em primeira pessoa ou terceira pessoa.


PointerLock ↗ source

Pode ser usado para determinar se o ponteiro do mouse está seguindo automaticamente o ponto de foco da camera (locked) ou se pode mover-se livremente na tela (unlocked).

Está anexado à CameraEntity, e seu estado pode ser lido (mas não escrito) a partir da scene.


PointerEvents ↗ source

Mostra feedback visual quando o pointer clica ou passa sobre uma Entity.


PointerEventsResult ↗ source

Contém informações sobre entradas recentes do jogador, incluindo keys e pointer actions.

Está anexado à RootEntity, e atualizado pelo runtime com quaisquer novos events a cada frame.


Raycast ↗ source

Pode ser anexado a uma Entity para solicitar um raycast ao game engine. O RaycastResult component será anexado posteriormente à mesma entity.

A origem, direção e comprimento máximo do ray podem ser configurados.


RaycastResult ↗ source

Anexado pelo runtime a Entities que possuem um Raycast component com resultados pendentes.

Contém informações sobre o ray original e identifica quaisquer Entities que foram atingidas.

Components de media

As scenes podem anexar components especiais para exibir images, mostrar video ou reproduzir sounds.


AudioSource ↗ source

Reproduz um audio clip incluído com a scene, dado o caminho do file no seu manifest.

O sound se origina da position da entity associada. Seu pitch, volume e comportamento de looping podem ser definidos, e o estado do audio player pode ser lido.

Em preparação para futuras atualizações, o campo em AudioSource é chamado audio_clip_url, mas na versão atual do protocolo, na verdade é o caminho definido no manifest.


AudioStream ↗ source

Semelhante a AudioSource, mas o audio é transmitido em tempo real a partir de uma URL externa.

Apesar de estar anexado a uma entity específica, o sound não é afetado por sua position. Seu volume pode ser definido, e o estado do audio player pode ser lido.


NftShape ↗ source

Exibe um NFT associado a um asset de imagem ou video.

Renderiza um canvas 2D com uma moldura decorativa configurável.

Components de área

Estes components permitem que scenes modifiquem o comportamento padrão de Entities dentro de limites especificados.


AvatarModifierArea ↗ source

Altera o comportamento de avatars dentro de um espaço centrado em uma Entity.

É definido com um vector de size 3D e pode afetar se avatars estão visíveis ou clicáveis. Avatars específicos podem ser excluídos desse efeito com base no user ID.


CameraModeArea ↗ source

Altera o camera mode (1st-person ou 3rd-person) dentro de um espaço centrado em uma Entity.

É definido com um vector de size 3D e um camera mode desejado.

Components de UI

Os seguintes components são usados para criar interfaces gráficas que flutuam sobre o game world.

Eles geralmente são anexados a conjuntos de Entities que possuem hierarchical UiTransform components, relacionados uns aos outros por meio do parent atributo.

Por exemplo, uma janela flutuante de opções poderia ser uma Entity com um UiTransform e um UiBackground component, mais uma Entity com um child UiTransform e um UiDropdown.


UiTransform ↗ source

Descreve o size, posicionamento, margin e padding de um UI component.

É baseado no modelo flexbox e altamente personalizável.


UiBackground ↗ source

Descreve uma cor ou texture para usar como background em uma UI Entity.


UiDropdown ↗ source

Define uma lista de opções mutuamente exclusivas a serem exibidas em um widget dropdown.


UiDropdownResult ↗ source

Contém o valor selecionado de um UiDropdown, definido pelo runtime e lido pela scene.


UiInput ↗ source

Define um widget de entrada de texto, com alguma margin para customização.


UiInputResult ↗ source

Contém o valor de texto de um UiInput, definido pelo runtime e lido pela scene.


UiText ↗ source

Define uma visualização de texto simples, com alguma margin para customização.


Atualizado