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:
Componentes de objeto adicionam propriedades visuais e físicas às Entities.
Componentes de jogo podem solicitar ações e receber informações do mecanismo de jogo.
Componentes de mídia podem exibir imagens e reproduzir sons.
Componentes de área alteram o comportamento das Entities em zonas específicas.
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 ↗ spec
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 RootEntity ID (0), qualquer Transform é relativo 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 um cilindro. Para renderizar formas 3D arbitrárias, use GltfContainer.
MeshCollider ↗ source
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 ↗ source
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 ↗ source
Anexa um modelo 3D a esta Entity, dado o caminho do arquivo 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 ↗ source
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 ↗ source
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 ↗ source
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 ↗ source
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 ↗ source
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 ↗ source
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 scene.
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 ECS para garantir consistência e ordenação para quaisquer mudanças de estado ou eventos.
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á automaticamente seguindo o ponto de foco da câmera (locked), ou pode mover-se livremente na tela (unlocked).
Está anexado ao CameraEntity, e seu estado pode ser lido (mas não escrito) a partir da cena.
PointerEvents ↗ source
Mostra feedback visual quando o ponteiro clica ou passa o mouse sobre uma Entity.
PointerEventsResult ↗ source
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 ↗ source
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 ↗ source
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 ↗ source
Reproduz um clipe de áudio empacotado com a cena, dado o caminho do arquivo no seu manifesto.
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.
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 ↗ source
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 ↗ source
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 ↗ source
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 ↗ source
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 ↗ source
Descreve o tamanho, posicionamento, margem e padding de um componente de UI.
É baseado no modelo flexbox e altamente personalizável.
UiBackground ↗ source
Descreve uma cor ou textura a ser usada como fundo em uma Entity de UI.
UiDropdown ↗ source
Define uma lista de opções mutuamente exclusivas a ser exibida em um widget dropdown.
UiDropdownResult ↗ source
Contém o valor selecionado de um UiDropdown, definido pelo runtime e lido pela cena.
UiInput ↗ source
Define um widget de entrada de texto, com alguma margem para personalização.
UiInputResult ↗ source
Contém o valor de texto de um UiInput, definido pelo runtime e lido pela cena.
UiText ↗ source
Define uma visualização de texto simples, com alguma margem para personalização.
Atualizado