Avatares NPC

Exibir e controlar avatar NPC

Exibir um avatar como uma entidade em uma cena.

circle-info

💡 Tip: Experimente o NPC Toolkit libraryarrow-up-right para uma experiência mais fácil ao lidar com NPCs, especialmente se você precisar interagir via uma árvore de conversação.

Criar um avatar

O trecho a seguir cria um avatar com wearables e body shape aleatórios, e nome "NPC".

const myAvatar = engine.addEntity()
AvatarShape.create(myAvatar)

Transform.create(myAvatar, {
	position: Vector3.create(4, 0.25, 5),
})

Ao passar dados para gerar um AvatarShape, os seguintes campos são obrigatórios:

  • id: (obrigatório) Identificador interno para o Avatar

Os seguintes campos opcionais também estão disponíveis:

  • campo name: Nome a ser exibido sobre a cabeça do Avatar. Padrão: "NPC".

  • bodyShape: String para definir qual body shape usar. Opções válidas são 'urn:decentraland:off-chain:base-avatars:BaseMale' e 'urn:decentraland:off-chain:base-avatars:BaseFemale'.

  • wearables: Array com lista de URNs dos wearables que o avatar está usando atualmente. Se os wearables entrarem em conflito (como dois sendo chapéus), o último na lista substitui o outro.

  • emotes: Array com lista de URNs de emotes NFT que o avatar é capaz de reproduzir

  • eyeColor: Color3 para a cor dos olhos (qualquer cor é válida)

  • skinColor: Color3 para a cor da pele (qualquer cor é válida)

  • hairColor: Color3 para a cor do cabelo (qualquer cor é válida)

  • talking: Se true, exibe um conjunto de barras verdes ao lado do nome, como quando jogadores usam voice chat in-world.

  • circle-info

    💡 Tip: Veja tipos de cor para mais detalhes sobre como definir cores.

circle-exclamation
circle-exclamation

Animations

Avatars reproduzem animações ociosas padrão enquanto ainda estarão parados.

Para reproduzir animações no avatar, defina o expressionTriggerId string para o nome da animação que você quer reproduzir.

O expressionTriggerId field suporta todas as default animations, assim como animações personalizadas from a scene file, e até URNs de emotes que estão publicados no marketplace.

Animações em loop

Animações em um AvatarShape reproduzem uma vez; se você quiser que o avatar fique repetindo uma animação, você deve criar um sistema que diga para reproduzi-la novamente a cada alguns segundos.

Use o expressionTriggerTimestamp para reproduzir o mesmo emote novamente. O valor deste campo é um lamport timestamparrow-up-right, significando que não é um valor de tempo, mas sim um índice que é aumentado em 1 para cada repetição do emote.

Então a primeira vez que você reproduz um emote, você define expressionTriggerTimestamp para 0. Para reproduzir o emote novamente, você deve atualizar esse valor para 1. É assim que o engine sabe que esta é uma nova instrução, e não uma instrução que já foi executada.

O trecho a seguir cria um sistema que executa o mesmo emote a cada 2 segundos:

circle-info

💡 Tip: Você deve saber a duração do emote, e tornar essa a duração do sistema. Se você criar um emote que mantenha o avatar parado na mesma pose, é recomendável fazer a duração do emote maior que a do sistema. Dessa forma, você pode garantir que não haja artefatos ao finalizar e resetar a animação.

Copiar wearables do jogador

O trecho a seguir altera os wearables e outras características de um avatar NPC para coincidir com os que o jogador está usando atualmente. Isso pode ser usado em uma cena como um manequim, para mostrar um wearable ou emote específico combinado com o traje atual do jogador.

Exibir apenas wearables

Use o show_only_wearables campo para exibir apenas os wearables listados de um avatar. O resto do corpo do avatar ficará invisível.

Isto é útil para exibir wearables, por exemplo em uma loja.

circle-info

💡 Tip: Se um wearable for muito pequeno, tente definir o scale do Transform para um valor maior.

Anexar uma entidade a um NPC

Você pode usar o AvatarAttach recurso para fixar uma entidade a um dos ossos de um avatar NPC, por exemplo para que o NPC esteja segurando um objeto na mão. A entidade se moverá junto com o avatar quando ele animar.

Para usar esse recurso, use o id propriedade no AvatarShape para atribuir um id arbitrário a esse avatar, e então referenciar esse id no AvatarAttach. O id pode ser qualquer string que você quiser.

Saiba mais sobre o AvatarAttach componente aqui.

Atualizado