Posicionamiento de entidades
Cómo establecer la posición, rotación y escala de una entidad en una escena
Puedes establecer la propiedad position, rotation y scale de cualquier entidad usando el Transform componente. Esto puede usarse en cualquier entidad en el espacio 3D, afectando dónde se renderiza la entidad. Esto incluye formas primitivas (cubo, esfera, plano, etc.), formas de texto 3D, NftShape y modelos 3D (GltfContainer).
Usa el Scene Editor en Creator Hub
Al añadir un elemento a tu escena mediante el Scene Editor, implícitamente incluye un Transform componente. Luego cambias los valores en el componente Transform de la entidad implícitamente al cambiar la posición, rotación o escala de una entidad. También puedes usar la UI del Scene Editor para proporcionar valores numéricos con mayor precisión.
Conceptos esenciales de código

Para mover, rotar o redimensionar una entidad en tu escena durante un periodo de tiempo, cambia los valores de este componente de forma incremental, cuadro por cuadro. Ver Mover entidades para más detalles y buenas prácticas.
📔 Nota: Vector3 y Quaternion deben importarse vía
import { Vector3, Quaternion } from "@dcl/sdk/math"
Vea Imports para ver cómo manejar estos fácilmente.
Posición
position es un vector 3D, establece la posición del centro de la entidad en los tres ejes, x, y, y z. Ver Tipos de geometría para más detalles.
Al establecer una posición, ten en cuenta las siguientes consideraciones:
Los números en un vector de posición representan metros (a menos que la entidad sea hija de una entidad escalada).
Una escena compuesta por un único parcel mide 16m x 16m. El centro de la escena (a nivel del suelo) está en
x:8, y:0, z:8. Si la escena está compuesta por múltiples parcels, entonces el centro variará según su disposición.x:0, y:0, z:0se refiere a la esquina suroeste de la parcela base de la escena, a nivel del suelo.Consejo: Al ver una vista previa de la escena, aparece una brújula en el punto (0,0,0) de la escena con etiquetas para cada eje como referencia.
Nota: Puedes cambiar la parcela base de una escena editando el
atributo basede scene.json.Para orientarte mejor, usa tu left mano:
tu dedo índice (apuntando hacia adelante) es el z eje
tu dedo medio (apuntando hacia un lado) es el x eje
tu pulgar (apuntando hacia arriba) es el y eje.
Si una entidad es hija de otra, entonces
x:0, y:0, z:0se refiere al centro de su entidad padre, dondequiera que esté en la escena.Cada entidad en tu escena debe estar posicionada dentro de los límites de las parcels que ocupa en todo momento. Si una entidad sale de esos límites, generará un error.
Consejo: Al ver una escena en modo previa, las entidades que están fuera de los límites se resaltan en rojo.
Tu escena también tiene un límite de altura. Cuantas más parcels componen la escena, más alto puedes construir. Ver limitaciones de la escena para más detalles.
Rotación
rotation se guarda como un quaternion, un sistema de cuatro números, x, y, z y w. Cada uno de estos números va de 0 a 1. Ver Tipos de geometría para más detalles.
También puedes establecer el campo rotation con Euler ángulos, la notación más común x, y y z con números que van de 0 a 360 con la que la mayoría está familiarizada. Para usar ángulos Euler, utiliza una de las siguientes notaciones:
Al usar un vector 3D para representar ángulos Euler, x, y y z representan la rotación en ese eje, medida en grados. Una vuelta completa requiere 360 grados.
Cuando recuperas la rotación de una entidad, devuelve un quaternion por defecto. Para obtener la rotación expresada en ángulos Euler, usa .toEuler():
Mirar al jugador
Añade un Billboard componente a una entidad para que siempre rote para mirar al jugador.
Los billboards fueron una técnica común usada en juegos 3D de los 90, donde la mayoría de las entidades eran planos 2D que siempre miraban al jugador. La misma idea también puede usarse para rotar un modelo 3D.
Puedes configurar cómo se comporta el billboard con los siguientes parámetros:
billboardMode: Usa un valor de laBillboardModepara establecer su comportamiento:BillboardMode.BM_ALL: La entidad rota para mirar al jugador en todos sus ejes de rotación. Si el jugador está por encima de la entidad, la entidad mirará hacia arriba.BillboardMode.BM_NONE: La entidad no rotará en absoluto.BillboardMode.BM_X: La entidad tiene su x eje de rotación fijado.BillboardMode.BM_Y: La entidad tiene su y eje de rotación fijado. Solo rota a la izquierda y a la derecha, no arriba y abajo. Permanece perpendicular al suelo si el jugador está por encima o por debajo de la entidad.BillboardMode.BM_Z: La entidad tiene su z eje de rotación fijado.
El rotation el valor del Transform componente de la entidad no cambia mientras el billboard sigue a los jugadores.
Si una entidad tiene tanto un Billboard componente como un Transform componente con rotation valores, los jugadores verán la entidad rotando como un billboard. Si el billboard no afecta todos los ejes, los ejes restantes se rotarán según la Transform componente.
📔 Nota: Si hay múltiples jugadores presentes al mismo tiempo, cada uno verá las entidades con el modo billboard orientadas hacia ellos. Las rotaciones de billboard se calculan localmente para cada jugador y no afectan lo que ven los demás.
Mirar un conjunto de coordenadas
Para que la entidad A mire a la entidad B:
Escala
scale es también un vector 3D, almacenado como un Vector3 objeto, incluyendo el factor de escala en el x, y y z eje. La forma de la entidad se escala en consecuencia, ya sea una primitiva o un modelo 3D.
La escala por defecto es 1, así que asigna un valor mayor a 1 para estirar una entidad o menor que 1 para reducirla.
Heredar transformaciones del padre
Cuando una entidad está anidada dentro de otra, las entidades hijas heredan componentes de los padres. Esto significa que si una entidad padre está posicionada, escalada o rotada, sus hijos también se ven afectados. Los valores de posición, rotación y escala de las entidades hijas no sobrescriben los de los padres; en su lugar, se componen.
Asignas una entidad como padre de otra estableciendo el campo parent en el Transform componente.
Transform de la entidad hija.
position: Vector3.create(0, 1, 0), En este ejemplo, la entidad hija se reducirá a 0.5, ya que su padre tiene esa escala. La posición de la entidad hija también será relativa a su padre. Tenemos que sumar la posición del padre más la del hijo. En este caso, dado que el padre está escalado a la mitad, la transformación del hijo también se reduce proporcionalmente. En términos absolutos, el hijo está posicionado en{ x: 3, y: 1.5, z: 1 } rotation. Si el padre tuviera una
, esto también afectaría la posición final del hijo, ya que cambia el eje en el que el hijo se desplaza. position Si una entidad hija no tiene 0,0,0en su Transform, el valor por defecto es
, lo que la dejará posicionada en la misma posición que su padre.
Puedes usar una entidad invisible sin componente de forma como padre, para envolver un conjunto de otras entidades. Esta entidad no será visible en la escena renderizada, pero puede usarse para agrupar sus hijos y aplicarles un transform a todos.
Adjuntar una entidad a un avatar
Hay tres métodos para adjuntar una entidad al jugador: Hacerla hija del
Hay tres métodos para adjuntar una entidad al jugador: Avatar Entity
Usa la Camera Entity
componente AvatarAttach La forma más simple de adjuntar una entidad al avatar es establecer el parent como la engine.PlayerEntityentidad reservada
parent: engine.PlayerEntity, La forma más simple de adjuntar una entidad al avatar es establecer el parent como la También puedes asignar una entidad a laengine.CameraEntity
parent: engine.CameraEntity, AvatarAttach Para adjuntar un objeto a uno de los huesos del avatar y que se mueva junto con las animaciones del avatar, añade un
componente al entidad.
Al crear un AvatarAttach avatarId: '0xAAAAAAAAAAAAAAAAA',
componente, pasa un objeto con los siguientes datos:: avatarId OpcionalEl ID del jugador al que adjuntar. Esto es lo mismo que la dirección Ethereum del jugador, para aquellos jugadores conectados con una wallet de Ethereum. Si no se especifica, adjunta la entidad al avatar del jugador local.anchorPointId: Qué punto de anclaje en el esqueleto del avatar usar para adjuntar la entidad, usando un valor del enum.
📔 NotaAvatarAnchorPointType componente, pasa un objeto con los siguientes datos:: Si quieres que todos los jugadores en la escena vean un objeto adjunto al mismo jugador, por ejemplo para que todos vean que el Jugador A recogió un objeto y lo sostiene en la mano izquierda, entonces debes proporcionar un valor a
. Si no se especifica, todos los jugadores verán el objeto adjunto a sus propios avatares.
syncEntity(entity, [AvatarAttach.componentId]) : Qué punto de anclaje en el esqueleto del avatar usar para adjuntar la entidad, usando un valor del enum Los siguientes puntos de anclaje están disponibles en el
enum:AAPT_RIGHT_HAND: Fijado en la mano derecha del jugadorAAPT_LEFT_HAND: Fijado en la mano izquierda del jugadorAAPT_HEAD: Fijado al centro de la cabeza del jugador.AAPT_NECK: Fijado en la base del cuello del jugador.AAPT_SPINE: Fijado en la sección superior de la columna vertebral.AAPT_SPINE1: Fijado en la sección media de la columna vertebral.AAPT_SPINE2: Fijado en la sección inferior de la columna vertebral.AAPT_HIP: Fijado al hueso de la cadera.AAPT_LEFT_SHOULDER: Fijado al hombro izquierdo.AAPT_LEFT_ARM: Fijado al primer hueso del brazo izquierdo, a la altura del hombro.AAPT_LEFT_FOREARM: Fijado al hueso del antebrazo izquierdo.AAPT_LEFT_HAND_INDEX: Fijado en la punta del dedo índice izquierdo.AAPT_RIGHT_SHOULDER: Fijado al hombro derecho.AAPT_RIGHT_ARM: Fijado al primer hueso del brazo derecho, a la altura del hombro.AAPT_RIGHT_FOREARM: Fijado al hueso del antebrazo derecho.AAPT_RIGHT_HAND_INDEX: Fijado en la punta del dedo índice derecho.AAPT_LEFT_UP_LEG: Fijado al hueso superior de la pierna izquierda.AAPT_LEFT_LEG: Fijado al hueso inferior de la pierna izquierda.AAPT_LEFT_FOOT: Fijado al tobillo de la pierna izquierda.AAPT_LEFT_TOE_BASE: Fijado en la punta del dedo del pie de la pierna izquierda.AAPT_RIGHT_UP_LEG: Fijado al hueso superior de la pierna derecha.AAPT_RIGHT_LEG: Fijado al hueso inferior de la pierna derecha.AAPT_RIGHT_FOOT: Fijado al tobillo de la pierna derecha.AAPT_RIGHT_TOE_BASE: Fijado en la punta del dedo del pie de la pierna derecha..AAPT_NAME_TAG: Flota justo encima del name tag del jugador, no se ve afectado por las animaciones del jugador.
Nota: La altura del name tag se ajusta dinámicamente en función de la altura de los wearables que tenga un jugador. Así que un jugador que lleve un sombrero alto tendrá su name tag un poco más alto que otros.AAPT_POSITIONDEPRECATED
: La posición general del jugador. Aparece a una altura de 0.8 por encima de los pies del jugador.

y VS Code mostrará la lista completa de opciones en un desplegable.
📔 NotaEl renderizado de entidades se determina localmente en cada instancia de la escena. Adjuntar una entidad en un jugador no la hace visible para otros jugadores que vean a ese jugador. Si una entidad está adjunta al jugador local por defecto, cada jugador experimentará la entidad como adjunta a su propio avatar.
El AvatarAttach : Las entidades adjuntas a un avatar deben permanecer dentro de los límites de la escena para ser renderizadas. Si un jugador sale de tu escena, las entidades adjuntas dejan de renderizarse hasta que el jugador vuelva a entrar. Los smart wearables no tienen esta limitación. Transform El componente sobrescribe al AvatarAttach componente. Una sola entidad puede tener tanto un Transform como un Transform componente al mismo tiempo, pero los valores en el
componente se ignoran.
Collision layers
Puedes usar la AvatarAttach Adjuntar a otros jugadores
componente para adjuntar una entidad a otro jugador. Para hacer esto, debes conocer el id del jugador. componente, pasa un objeto con los siguientes datos:Para adjuntar una entidad al avatar de otro jugador, debes proporcionar el ID del usuario en el campo . Hay varias formas
📔 Notade obtener estos datos. userId : Para aquellos jugadores conectados con una wallet de Ethereum, su
es lo mismo que su dirección Ethereum. userId Obtén el getPlayer()
console.log('Player id: ', data.address) AvatarAttachUsándolo junto con
avatarId: data.address, Ver otras formas de obtener los IDs de otros usuarios en.
Límites de la escena
Obtener datos del jugador
Todas las entidades en tu escena deben caber dentro de los límites de la escena, ya que lo que está fuera de esos límites son parcels de tierra que pertenecen a otros jugadores.
Si alguna parte de tus modelos se extiende más allá de estos límites al ejecutar una vista previa, esas partes que sobresalen serán recortadas y no se renderizarán, tanto en la vista previa como en la escena publicada.
La posición de las entidades en tu escena se verifica constantemente a medida que se mueven; si una entidad sale de la escena y luego vuelve, será eliminada y luego renderizada normalmente otra vez. x y z Una cuadrícula en el suelo de la escena muestra los límites de la escena, que por defecto van de 0 a 16 en el eje y , y hasta 20 en el eje y eje.
Última actualización