Componentes Básicos

O World Explorer suporta uma lista de componentes básicos que compartilham sua definição com cenas, fornecendo suporte embutido para posicionamento, animação, mídia, consultas de estado do mundo

Existem cinco tipos de componentes:

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

  2. Componentes de jogo podem solicitar ações e receber informações do mecanismo de jogo.

  3. Componentes de mídia podem exibir imagens e reproduzir sons.

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

  5. Componentes UI permitem que as cenas renderizem interfaces flutuantes.

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

Componentes de Objeto

Os componentes mais comuns são aqueles que adicionam propriedades visuais e físicas a uma Entity. Eles podem ser usados para posicionar, redimensionar, pintar e adicionar colisão a objetos no jogo.


Transform ↗ specarrow-up-right

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

Este componente é, de longe, o mais usado e frequentemente atualizado durante a vida útil de uma cena. Por causa disso, Transform não é serializado usando protocol buffers, sendo em vez disso empacotado em uma estrutura personalizada.

Transform tem um tamanho de 44 bytes, com esse 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 coordenadas 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 RootEntityarrow-up-right ID (0), qualquer Transform é relativo a ele por padrão.

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


MeshRenderer ↗ sourcearrow-up-right

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

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


MeshCollider ↗ sourcearrow-up-right

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

Pode ser configurado para se comportar como um plano, uma esfera, um cubo ou um cilindro. Para ter uma malha de colisão personalizada, use GltfContainer.


Material ↗ sourcearrow-up-right

Define a textura, iluminação, cor e propriedades de transparência de uma Entity que também possui o componente MeshRenderer .

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

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


GltfContainer ↗ sourcearrow-up-right

Anexa um modelo 3D a esta Entity, dado o caminho do arquivoarrow-up-right de um .gltf asset no manifesto da cena.

Como o modelo tem suas próprias malhas e materiais, este componente substitui qualquer comportamento de MeshRenderer, MeshCollider e Material.


Billboard ↗ sourcearrow-up-right

Faz com que uma Entity reoriente automaticamente seu Transform para enfrentar a câmera. Como o nome indica, é usado para exibir placas no jogo e frequentemente combinado com TextShape.

Afeta todas as direções por padrão, mas pode ser configurado para girar apenas em um eixo.


Animator ↗ sourcearrow-up-right

Define uma ou mais animações que podem ser aplicadas simultaneamente a uma entity.

As cenas podem definir o estado do componente para personalizar, reproduzir e fazer transições entre animações, assim como lê-lo para verificar quais animações estão disponíveis ou estão sendo reproduzidas no momento.


AvatarAttach ↗ sourcearrow-up-right

Indica que a posição de uma Entity deve seguir um ponto de ancoragem particular no corpo de um avatar.

Pode afetar qualquer avatar, não apenas o do jogador, definindo um ID de usuário.


TextShape ↗ sourcearrow-up-right

Renderiza texto na posição de uma Entity, dada pelo seu Transform.

É altamente configurável, suportando parâmetros como tamanho, margem, padding, cor, sombra e mais.


Visibility ↗ sourcearrow-up-right

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

Objetos invisíveis ainda existem e exibirão comportamento de quaisquer outros componentes anexados.


AvatarShape ↗ sourcearrow-up-right

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

Este componente é anexado a entities na avatar scenearrow-up-right.

Componentes de Jogo

Alguns componentes básicos podem ser usados pela cena e pelo runtime para trocar informações. Eles aproveitam o mecanismo de sincronização ECSarrow-up-right para garantir consistência e ordenação para quaisquer mudanças de estado ou eventos.


CameraMode ↗ sourcearrow-up-right

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


PointerLock ↗ sourcearrow-up-right

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

Está anexado ao CameraEntityarrow-up-right, e seu estado pode ser lido (mas não escrito) a partir da cena.


PointerEvents ↗ sourcearrow-up-right

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


PointerEventsResult ↗ sourcearrow-up-right

Contém informações sobre entrada recente do jogador, incluindo teclas e ações do ponteiro.

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


Raycast ↗ sourcearrow-up-right

Pode ser anexado a uma Entity para solicitar um raycast ao mecanismo de jogo. O componente RaycastResult será posteriormente anexado à mesma entity.

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


RaycastResult ↗ sourcearrow-up-right

Anexado pelo runtime a Entities que têm um componente Raycast pendente de resultados.

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

Componentes de Mídia

As cenas podem anexar componentes especiais para exibir imagens, mostrar vídeo ou reproduzir sons.


AudioSource ↗ sourcearrow-up-right

Reproduz um clipe de áudio empacotado com a cena, dado o caminho do arquivo no seu manifestoarrow-up-right.

O som se origina da posição da entity associada. Seu pitch, volume e comportamento de repetição podem ser definidos, e o estado do reprodutor de áudio pode ser lido.

circle-info

Em preparação para upgrades futuros, o campo em AudioSource é chamado audio_clip_url, mas na versão atual do protocolo é na verdade o caminho definido no manifesto.


AudioStream ↗ sourcearrow-up-right

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

Apesar de estar anexado a uma entity particular, o som não é afetado por sua posição. Seu volume pode ser definido, e o estado do reprodutor de áudio pode ser lido.


NftShape ↗ sourcearrow-up-right

Exibe um NFT associado a um asset de imagem ou vídeo.

Renderiza uma tela 2D com uma moldura decorativa configurável.

Componentes de Área

Esses componentes permitem que as cenas modifiquem o comportamento padrão das Entities dentro de limites especificados.


AvatarModifierArea ↗ sourcearrow-up-right

Altera o comportamento dos avatares dentro de um espaço centrado em torno de uma Entity.

É definido com um vetor de tamanho 3D e pode afetar se avatares são visíveis ou clicáveis. Avatares específicos podem ser excluídos desse efeito dado o ID do seu usuário.


CameraModeArea ↗ sourcearrow-up-right

Altera o modo de câmera (1st-person ou 3rd-person) dentro de um espaço centrado em torno de uma Entity.

É definido com um vetor de tamanho 3D e um modo de câmera desejado.

Componentes de UI

Os seguintes componentes são usados para criar interfaces gráficas que flutuam sobre o mundo do jogo.

Eles geralmente são anexados a conjuntos de Entities que têm hierárquicos UiTransform componentes, relacionados entre si via o parent atributo.

Por exemplo, uma janela de opções flutuante poderia ser uma Entity com um UiTransform e um UiBackground componente, além de uma Entity com um filho UiTransform e um UiDropdown.


UiTransform ↗ sourcearrow-up-right

Descreve o tamanho, posicionamento, margem e padding de um componente de UI.

É baseado no modelo flexbox e altamente personalizável.


UiBackground ↗ sourcearrow-up-right

Descreve uma cor ou textura a ser usada como fundo em uma Entity de UI.


UiDropdown ↗ sourcearrow-up-right

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


UiDropdownResult ↗ sourcearrow-up-right

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


UiInput ↗ sourcearrow-up-right

Define um widget de entrada de texto, com alguma margem para personalização.


UiInputResult ↗ sourcearrow-up-right

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


UiText ↗ sourcearrow-up-right

Define uma visualização de texto simples, com alguma margem para personalização.


Atualizado