Referenciar itens no código

Referencie itens no seu código por nome ou por tag.

Você pode referenciar itens adicionados via a interface de arrastar-e-soltar do Creator Hub no seu código. Isso é útil para adicionar comportamentos sofisticados a esses itens ou para referenciá-los de outras partes do seu código.

Buscar por nome

Ao usar o Creator Hub e adicionar entidades arrastando-as para a tela, cada entidade possui um nome único. Use o engine.getEntityOrNullByName() para referenciar uma dessas entidades a partir do seu código.

Use o EntityNames enum para acessar facilmente os nomes das entidades que você adicionou via Creator Hub, ou escreva o nome como uma string conforme está na visualização da árvore de entidades da cena no Scene Editor.

import { EntityNames } from '../assets/scene/entity-names'

function main() {

	// Use the EntityNames enum
	const door1 = engine.getEntityOrNullByName(EntityNames.Door_1)

	// Write the name as a string
	const door2 = engine.getEntityOrNullByName('Door 2')

	// Ensure both doors exsist in the scene
	(if door1 && door2){
		// 
	}

}


O EntityNames enum contém a lista completa de entidades adicionadas pelo Creator Hub e é atualizado imediatamente assim que você faz qualquer alteração. Se você importar EntityNames. no seu código, seu IDE apresentará um dropdown incluindo todos os nomes das entidades disponíveis.



Você também pode usar o engine.getEntityByName<EntityNames>() função, passando <EntityNames> como um genérico TypeScriptarrow-up-right, para validar que uma entidade com esse nome realmente existe na sua cena. Se a entidade referenciada for renomeada no Creator Hub, esse método irá avisá-lo com um erro. Como a saída dessa função não pode ser null, você pode evitar verificar se a entidade existe.

circle-exclamation

Uma vez que você obtém uma referência para uma entidade com qualquer um dos métodos acima, você está livre para executar qualquer ação com ela, como adicionar ou remover componentes, modificar valores de componentes existentes, ou até remover a entidade do engine.

Todas as entidades adicionadas via Scene Editor possuem um componente Name , você também pode iterar sobre todas elas assim:

Buscar por Tag

Você também pode buscar entidades por suas tags. Tags são uma forma de agrupar entidades e são úteis para identificar entidades que têm o mesmo propósito ou comportamento.

Adicione Tags a uma entidade via a Tags seção no topo do painel de propriedades do item. Você pode escolher entre as tags genéricas como Tag Group 1 até Tag Group 4, ou criar as suas próprias com um nome mais específico.


circle-info

💡 Dica: Uma única entidade pode ter múltiplas tags atribuídas a ela.



Você pode então buscar todas as entidades que têm uma tag específica usando a função engine.getEntitiesByTag() . Isso é ideal quando você quer iterar sobre um grupo de entidades que têm o mesmo propósito ou comportamento.

Você também pode adicionar ou remover tags de uma entidade a partir do seu código. Isso é útil se você quiser alterar tags com base em alguma lógica, ou para spawnar entidades dinamicamente que tenham tags específicas.

Buscar todos os filhos de um item

Uma vez que você tem uma referência para um item em particular, você pode buscar todos os itens que estão agrupados como seus filhos na árvore de entidades à esquerda da tela. O script a seguir busca a entidade pai e então itera por cada um dos seus filhos que possuem um componente Transform. Você então pode aplicar qualquer lógica personalizada enquanto itera por cada um.

Gatilhos de smart item

Você pode detectar os Trigger eventsde um smart item e responder a eles com código personalizado. Por exemplo, você pode colocar um botão smart item e ativar código personalizado quando o botão for clicado.

Use getTriggerEvents para buscar um objeto que pode manipular eventos de trigger de um smart item específico, então use a .on() função do objeto retornado para assinar uma função de callback. Essa função de callback é executada toda vez que o evento de trigger acontece.

Por exemplo, se uma cena tem um botão com o seguinte genérico On Click event, você pode escrever o código abaixo para executar código personalizado sempre que o botão for ativado.



Você pode de forma semelhante assinar qualquer outro tipo de eventos de trigger, como ON_PLAYER_ENTERS_AREA, ON_SPAWN, ON_TWEEN_END, etc.

Ações de smart item

Você pode detectar a ativação das Actionsde um smart item e responder a elas com código personalizado. Por exemplo, você pode colocar um smart item de porta e executar código personalizado sempre que a ação Open for chamada.

Use getActionEvents para buscar um objeto para manipular as ações de um smart item específico. Então você pode usar a .on() função do objeto retornado para assinar uma função de callback. Essa função de callback é executada sempre que a ação acontece, independentemente se a ação foi ativada por outro smart item ou mesmo por código personalizado seu.

Por exemplo, se uma cena tem uma porta com a seguinte ação padrão Open , você pode escrever o código abaixo para executar código personalizado sempre que a porta for aberta.



Você também pode emitir eventos de ação a partir do seu código, isso permite tirar proveito de ações que já estão definidas dentro do componente Action do smart item. O snippet a seguir chama a ação "Open" em um smart item de porta sempre que um smart item de botão é acionado.

circle-info

💡 Dica: Se você não estiver tentando fazer algo muito complicado, em vez de escrever código você também pode criar um smart item personalizado para lidar com as ações que deseja executar. Veja Making any item smart.

Outros componentes de smart item

Smart items podem incluir componentes especiais que fazem parte da biblioteca asset-packs, como States ou Counter. Esses componentes não fazem parte do SDK do Decentraland, mas podem ser obtidos via a função getComponents() da biblioteca. Você então pode ler ou escrever valores nesses componentes a partir do código da sua cena, para ter uma integração ainda mais próxima entre o comportamento do smart item e o código.

O exemplo abaixo lê e registra o valor de um componente State de um smart item de baú, sempre que as ações do baú são acionadas.

Atualizado