Referenciar elementos en el código

Referencia elementos en tu código por nombre o por etiqueta.

Puedes referenciar elementos que se añaden mediante la interfaz de arrastrar y soltar del Creator Hub en tu código. Esto es útil para añadir comportamientos sofisticados a esos elementos o para referenciarlos desde otras partes de tu código.

Buscar por nombre

Al usar el Creator Hub y añadir entidades arrastrándolas al lienzo, cada entidad tiene un nombre único. Usa el engine.getEntityOrNullByName() función para referenciar una de estas entidades desde tu código.

Usa el EntityNames enum para acceder fácilmente a los nombres de las entidades que añadiste vía el Creator Hub, o escribe el nombre como una cadena tal como aparece en la vista del árbol de entidades de la escena en el Scene Editor.

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

function main() {

	// Usa el enum EntityNames
	const door1 = engine.getEntityOrNullByName(EntityNames.Door_1)

	// Escribe el nombre como una cadena
	const door2 = engine.getEntityOrNullByName('Door 2')

	// Asegúrate de que ambas puertas existen en la escena
	(if door1 && door2){
		// 
	}

}


El EntityNames enum contiene la lista completa de entidades añadidas por el Creator Hub y se actualiza inmediatamente tan pronto como realizas cualquier cambio. Si importas EntityNames. en tu código, tu IDE te mostrará un desplegable que incluye todos los nombres de las entidades disponibles.



También puedes usar el engine.getEntityByName<EntityNames>() función, pasando <EntityNames> como un TypeScript genericarrow-up-right, para validar que realmente existe en tu escena una entidad con ese nombre. Si la entidad referenciada se renombra en el Creator Hub, este método te advertirá con un error. Como la salida de esta función no puede ser null, puedes evitar comprobar que la entidad exista.

circle-exclamation

Una vez que obtienes una referencia a una entidad con cualquiera de los métodos anteriores, eres libre de realizar cualquier acción con ella, como añadir o eliminar componentes, modificar valores de componentes existentes, o incluso eliminar la entidad del engine.

Todas las entidades añadidas mediante el Scene Editor tienen un componente Name , también puedes iterar sobre todas ellas así:

Buscar por etiqueta

También puedes obtener entidades por sus tags. Los tags son una forma de agrupar entidades y son útiles para identificar entidades que comparten el mismo propósito o comportamiento.

Añade Tags a una entidad mediante la Tags sección en la parte superior del panel de propiedades del ítem. Puedes escoger entre tags genéricos como Tag Group 1 hasta Tag Group 4, o crear los tuyos propios con un nombre más específico.


circle-info

💡 Consejo: Una única entidad puede tener múltiples tags asignados.



Luego puedes obtener todas las entidades que tienen una etiqueta específica usando la engine.getEntitiesByTag() función. Esto es ideal cuando quieres iterar sobre un grupo de entidades que comparten el mismo propósito o comportamiento.

También puedes añadir o eliminar tags de una entidad desde tu código. Esto es útil si quieres cambiar tags según cierta lógica, o para generar entidades dinámicamente que tengan tags específicos.

Obtener todos los hijos de un ítem

También puedes escribir un script que te permita manejar todos los ítems que están agrupados como hijos de cierto ítem en el árbol de entidades a la izquierda de la pantalla. El siguiente script itera sobre todas las entidades que tienen un Transform y un padre, y comprueba si el nombre del padre coincide con el nombre some-parent en este caso. Luego puedes aplicar cualquier lógica personalizada que quieras a esas entidades específicas.

Disparadores de smart items

Puedes detectar los Trigger eventsde un smart item, y responder a ellos con código personalizado. Por ejemplo, podrías colocar un smart item botón y activar código personalizado cuando se hace clic en el botón.

Usa getTriggerEvents para obtener un objeto que pueda manejar eventos trigger de un smart item en particular, luego usa la .on() función del objeto retornado para suscribir una función callback. Esta función callback se ejecuta cada vez que sucede el evento trigger.

Por ejemplo, si una escena tiene un botón con el siguiente genérico On Click evento, puedes escribir el código abajo para ejecutar código personalizado cada vez que el botón se activa.



De forma similar puedes suscribirte a cualquier otro tipo de eventos trigger, como ON_PLAYER_ENTERS_AREA, ON_SPAWN, ON_TWEEN_END, etc.

Acciones de smart items

Puedes detectar la activación de la Actionsde un smart item, y responder a ellas con código personalizado. Por ejemplo, podrías colocar un smart item puerta y ejecutar código personalizado cada vez que la Open acción sea llamada.

Usa getActionEvents para obtener un objeto que maneje las acciones de un smart item específico. Luego puedes usar la .on() función del objeto retornado para suscribir una función callback. Esta función callback se ejecuta cada vez que la acción ocurre, ya sea que la acción haya sido activada por otro smart item o incluso por código personalizado propio.

Por ejemplo, si una escena tiene una puerta con la siguiente acción por defecto Open action, puedes escribir el código abajo para ejecutar código personalizado cada vez que la puerta se abre.



También puedes emitir eventos de acción desde tu código; esto te permite aprovechar acciones que ya están definidas dentro del componente Action del smart item. El siguiente fragmento llama a la acción "Open" en un smart item puerta cada vez que se activa un smart item botón.

circle-info

💡 Consejo: Si no intentas hacer algo muy complicado, en lugar de escribir código también puedes crear un smart item personalizado para manejar las acciones que quieres realizar. Ver Making any item smartarrow-up-right.

Otros componentes de smart items

Los smart items pueden incluir componentes especiales que forman parte de la biblioteca asset-packs, como States u Counter. Estos componentes no forman parte del SDK de Decentraland, pero pueden obtenerse mediante la getComponents() función desde la biblioteca. Luego puedes leer o escribir valores en estos componentes desde el código de tu escena, para lograr una integración aún más estrecha entre el comportamiento del smart item y el código.

El ejemplo abajo lee y registra el valor de un componente State de un smart item cofre cada vez que se activan las acciones del cofre.

Última actualización