Objetos en movimiento son aquellos que se mueven en uno o más ejes dentro del espacio 3D. Usando el poder incorporado del motor de simulación de Roblox, puedes hacer que los objetos se muevan e interactúen con su entorno de una manera que emula el comportamiento físico del mundo real, que es familiar e intuitivo para los jugadores, como la gravedad, la aerodinámica y la fricción.
Usando el archivo Objetos en Movimiento .rbxl como referencia, este tutorial explica cómo las fuerzas físicas impactan el movimiento lineal en Studio, y te muestra varias técnicas para mover objetos del punto A al punto B en tus experiencias con diferentes comportamientos de movimiento, incluyendo orientaciones sobre:
- Usar un constraint de mover LinearVelocity para mover un ensamblaje completo a una velocidad lineal constante.
- Usar un PrismaticConstraint para restringir un ensamblaje a un único eje y moverlo a una velocidad lineal constante relativa a un punto en el espacio 3D.
- Usar el método ApplyImpulse para mover un ensamblaje con un impulso inicial de fuerza de modo que el ensamblaje desacelere lentamente con el tiempo.
Movimiento lineal y fuerzas físicas
Roblox Studio es un motor de simulación del mundo real que emula el comportamiento físico en tiempo real, por lo que, para predecir cómo se comportan los objetos en movimiento lineal en las experiencias, es importante tener una comprensión general de cómo se mueven los objetos en la vida real con movimiento lineal.
Movimiento lineal es el movimiento a lo largo de un eje. Por ejemplo, cuando un bloque tiene movimiento lineal, se mueve a lo largo de un eje establecido.

El movimiento lineal no puede existir sin fuerzas físicas externas empujando o tirando de los objetos. Según la primera ley de movimiento de Newton, los objetos estacionarios permanecen estacionarios y los objetos en movimiento permanecen en movimiento con una velocidad constante a menos que sean afectados por una fuerza externa. Por ejemplo, un bloque estacionario permanece estacionario a menos que una fuerza física como el viento lo empuje a moverse.
Fuerza es la medida de la dirección y magnitud de un empuje o tirón físico que hace que los objetos cambien su velocidad lineal a lo largo de un eje. Un cambio en la velocidad se conoce como aceleración. Este concepto es particularmente importante para que los objetos se muevan en Studio; cuanta más fuerza apliques a los objetos, más rápido aceleran.
Esto se debe a que la fuerza necesita ser mayor que cualquier fuerza física que empuje en contra del objeto, como la gravedad o la fricción. Por ejemplo, si colocas el bloque sobre una placa de metal, la fuerza física del viento necesita superar la cantidad de fricción de la placa de metal para seguir acelerando el bloque. Si la fuerza del viento no es mucho mayor que la fricción de la placa de metal, el bloque acelera, pero más lentamente que en el ejemplo anterior.

Velocidad lineal es la medida del movimiento de un objeto, o cuán rápido cambia la posición de un objeto a lo largo de un eje durante un período de tiempo. Studio mide la velocidad lineal de acuerdo a cuántos studs se mueve un objeto por segundo. Los studs son las unidades físicas primarias de Roblox para medir longitud, y cada stud equivale a aproximadamente 28 cm en el mundo real.

Entender la velocidad lineal es importante para diseñar el juego en tus experiencias porque te ayuda a determinar cuánta fuerza necesitas para lograr una velocidad particular para tus objetos en movimiento. Por ejemplo, cuando quieres propulsar objetos hacia arriba, es importante considerar cómo debes ajustar tu fuerza para superar la gravedad dentro del entorno, de modo que los objetos se muevan con precisión.
Las siguientes secciones profundizan más en estos conceptos mientras aprendes a mover objetos a una velocidad lineal constante o inicial con la fuerza necesaria para superar cualquier fuerza física opuesta dentro del entorno. A medida que revisas estos conceptos de física con las próximas técnicas, puedes predecir con más precisión cómo ajustar los valores de propiedad para lograr cualquier comportamiento ideal de movimiento lineal en Studio.
Mantener una velocidad lineal constante
Para que un objeto alcance y mantenga una velocidad lineal constante, necesita una fuerza que supere cualquier fuerza física opuesta que desacelere la velocidad lineal del objeto o haga que el objeto permanezca estacionario. Por ejemplo, si quieres que un objeto tenga una velocidad lineal de [0, 12, 0] en Studio, necesitas suficiente fuerza para que el objeto alcance y mantenga 12 studs por segundo a lo largo del eje Y en su entorno.
La cantidad de fuerza necesaria no solo depende de las fuerzas físicas opuestas dentro del entorno mismo, como la gravedad y la fricción, sino también del objeto en sí. Por ejemplo, si tienes dos objetos de la misma forma que se mueven en el mismo eje, el objeto con una mayor masa requiere más fuerza para lograr la misma aceleración lineal.
Las siguientes subsecciones utilizan ensamblajes de diferentes formas y tamaños para enseñarte cómo mover ya sea un objeto completo o solo una parte del objeto a una velocidad lineal constante. A medida que experimentas con diferentes valores de propiedad, aprenderás a estimar la cantidad máxima de fuerza que necesitas para los ensamblajes en tus propias experiencias.
Usar constraints de LinearVelocity
Los objetos LinearVelocity son un tipo de constraint de mover que aplican fuerza a un ensamblaje completo para mantener una velocidad lineal constante. Al no bloquear la posición del ensamblaje a un eje durante su movimiento, el ensamblaje es libre de rotar al colisionar con otros objetos en el espacio 3D. Este tipo de movimiento conduce a escenarios de juego sorprendentes que son más difíciles de predecir para los jugadores.
Para comenzar a mover el ensamblaje, el constraint LinearVelocity necesita saber:
- El punto y la dirección positiva o negativa para aplicar una fuerza.
- La cantidad de studs que deseas que se mueva el ensamblaje por segundo.
- La cantidad máxima de fuerza que el motor puede aplicar para que el ensamblaje alcance la velocidad lineal constante.
Para demostrar este proceso, vas a configurar una hoja de lirio con un adjunto del cual un LinearVelocity constraint hace referencia para mover la hoja de lirio 15 studs por segundo a lo largo del eje X negativo del mundo a una velocidad lineal constante.

Añadir adjunto
Puedes especificar el punto para aplicar fuerza agregando un objeto Attachment al ensamblaje, y luego configurando la posición del adjunto en el espacio 3D. La experiencia de Objetos en Movimiento coloca un adjunto en el centro de la hoja de lirio para que el constraint pueda mover la malla desde el adjunto a lo largo de un eje particular.
Los adjuntos incluyen ayudas visuales para ayudarte a visualizar sus ejes de movimiento. La flecha amarilla denota el eje principal del adjunto, y la flecha naranja denota el eje secundario del adjunto. Aunque ninguno de los ejes de movimiento influye en el movimiento de la hoja de lirio en los pasos de esta técnica, es importante entender estas ayudas visuales para futuras referencias porque pueden ayudarte a determinar el comportamiento ideal para diferentes tipos de constraints, como el PrismaticConstraint en la próxima técnica.

Para añadir un adjunto:
En la ventana Explorer, expande la carpeta LinearVelocityExample, y luego expande su modelo hijo LilyPad_DIY.
Inserta un adjunto en la malla Pad.
- Pasa el cursor sobre la malla y haz clic en el botón ⊕. Se muestra un menú contextual.
- En el menú, inserta un Attachment. El adjunto se muestra en el centro de la parte.
- Cambia el nombre del adjunto a MoveAttachment.

Configurar constraint
Ahora que tu malla tiene un punto fijo para mover la hoja de lirio, puedes configurar las propiedades de un constraint LinearVelocity para especificar la dirección y magnitud para la velocidad lineal constante, la cantidad de studs que deseas que la malla se mueva por segundo, y la cantidad máxima de fuerza que el motor puede aplicar para que la malla alcance una velocidad lineal constante.
La experiencia de Objetos en Movimiento aplica hasta 5000 Rowtons de fuerza constante para mover la hoja de lirio 15 studs por segundo a lo largo del eje X negativo del mundo a una velocidad lineal constante. Los Rowtons son las unidades físicas primarias de Roblox para medir fuerza. Para consultar las unidades físicas de Roblox y cómo se convierten a unidades métricas, consulta Unidades de Roblox.
Para configurar un constraint LinearVelocity:
Para hacer visible el constraint en el viewport para que puedas referenciar su dirección lineal, habilita Mostrar Detalles del Constraint desde el menú Ver de Studio.
Inserta un constraint LinearVelocity en la malla Pad.
- En la ventana Explorer, pasa el cursor sobre la malla, y luego haz clic en el ícono ⊕. Se muestra un menú contextual.
- En el menú contextual, inserta LinearVelocity.
Asigna el adjunto de la malla al nuevo constraint.
- En la ventana Explorer, selecciona el constraint.
- En la ventana Properties,
- Establece Attachment0 en MoveAttachment.
- Establece MaxForce en 5000 para aplicar hasta 5000 Rowtons de fuerza constante para lograr la velocidad lineal objetivo.
- Deja RelativeTo en World para mover la hoja de lirio en relación a la posición y orientación del mundo.
- Establece VelocityConstraint en Line para restringir la fuerza a lo largo de una línea desde el adjunto.
- Establece LineDirection en -1, 0, 0 para mover la hoja de lirio a lo largo del eje X negativo del mundo. Ten en cuenta que si establecieras esta propiedad en 1, 0, 0, la hoja de lirio se movería a lo largo del eje X positivo del mundo.
- Establece LineVelocity en 15 para mover la hoja de lirio 15 studs por segundo.

Verifica que la cantidad de fuerza que estableciste mueva la malla 15 studs por segundo a lo largo del eje X negativo del mundo.
Selecciona el modo de simulación Run desde el menú desplegable del mezzanine y haz clic en el botón Play para comenzar. Studio simula la experiencia en la posición actual de la cámara sin tu avatar en el espacio 3D.

Usar constraints de PrismaticConstraint
Los objetos PrismaticConstraint son un tipo de constraint mecánico que crean una unión rígida entre dos adjuntos, permitiendo que sus ensamblajes padres se muevan a lo largo de un eje relativo entre sí. Al bloquear la posición de ambos ensamblajes a un solo eje, cada ensamblaje solo puede rotar si rotan juntos en la misma dirección.
Este tipo de movimiento lleva a escenarios de juego estables que son más fáciles de predecir para los jugadores. Por ejemplo, la experiencia de Objetos en Movimiento utiliza objetos PrismaticConstraint para mover plataformas de troncos que los jugadores pueden usar para cruzar cuidadosamente un gran río.
Cuando estableces PrismaticConstraint.ActuatorType en Motor, este constraint aplica fuerza en los dos adjuntos con el objetivo de que los adjuntos alcancen y mantengan una velocidad lineal constante. Si anclas uno de los ensamblajes padres de los adjuntos, la fuerza continúa moviendo el ensamblaje no anclado a una velocidad lineal constante mientras que el ensamblaje anclado permanece estacionario.
Para comenzar a mover el ensamblaje, el constraint PrismaticConstraint necesita saber:
- El punto y la dirección positiva o negativa para aplicar una fuerza.
- La cantidad de studs que deseas que se muevan los adjuntos por segundo.
- La cantidad máxima de fuerza que el motor puede aplicar para que los adjuntos y sus ensamblajes padres alcancen una velocidad lineal constante.
Para demostrar este proceso, configurarás un ensamblaje de troncos con dos objetos que tienen adjuntos hijos a los cuales un PrismaticConstraint hace referencia para mover el tronco a 40 studs por segundo a lo largo del eje X negativo del mundo a una velocidad lineal constante.

Configurar adjuntos
Puedes especificar la dirección para mover un objeto particular dentro de un ensamblaje agregando dos objetos Attachment al ensamblaje, y luego configurando su alineación y orientación en el espacio 3D. La experiencia de Objetos en Movimiento alinea dos adjuntos a lo largo del eje X del mundo cerca de la posición en la que el tronco no anclado se superpone con la parte anclada, y orienta el eje principal de cada adjunto para que enfrente el eje X negativo del mundo.
Cuando configures tu constraint PrismaticConstraint en la siguiente sección, moverá el tronco en relación a la parte anclada. En otras palabras, el tronco se alejará de la parte estacionaria que no puede moverse porque está anclada en el espacio 3D.
Para configurar adjuntos para el constraint prismatic:
En la ventana Explorer, expande la carpeta PrismaticConstraintExample, y luego expande su modelo hijo Log_DIY.
Inserta un adjunto en la malla Log.
- Pasa el cursor sobre la malla y haz clic en el botón ⊕. Se muestra un menú contextual.
- En el menú, inserta un Attachment. El adjunto se muestra en el centro de la parte.
- Cambia el nombre del adjunto a LogAttachment.

Usando el mismo proceso, inserta un adjunto en la parte Anchor, y luego renombra el adjunto AnchorAttachment.

Usando la herramienta Selector de Vista como referencia para las coordenadas del mundo, rota LogAttachment y AnchorAttachment hasta que el eje principal de cada adjunto apunte hacia el eje X negativo del mundo.

Reposiciona AnchorAttachment para que ambos adjuntos estén alineados en el eje X del mundo.

Configurar constraint
Ahora que tus adjuntos están alineados en el mismo eje y enfrentan la misma dirección que quieres que se mueva el tronco, puedes configurar las propiedades de un constraint PrismaticConstraint para especificar si se aplica la velocidad lineal constante objetivo en la dirección positiva o negativa del eje principal de cada adjunto, la cantidad de studs que deseas que se muevan los adjuntos por segundo, y la cantidad máxima de fuerza que el motor puede aplicar para que el tronco alcance una velocidad lineal constante.
Aunque puedes elegir diferentes valores para tus propios casos de uso, la experiencia de Objetos en Movimiento aplica hasta 50000 Rowtons de fuerza constante para mover los adjuntos 40 studs por segundo a lo largo del eje X negativo del mundo a una velocidad lineal constante. Sin embargo, dado que el adjunto ancla está en un objeto anclado, solo el adjunto del tronco puede moverse.
Para configurar un constraint prismatic:
Inserta un objeto PrismaticConstraint en la malla Log.
- En la ventana Explorer, pasa el cursor sobre la malla, y luego haz clic en el ícono ⊕. Se muestra un menú contextual.
- En el menú contextual, inserta un PrismaticConstraint.
Asigna los adjuntos del tronco al nuevo constraint de modo que el tronco se mueva en relación a la parte bloqueada anclada.
- En la ventana Explorer, selecciona el constraint.
- En la ventana Properties,
- Establece Attachment0 en AnchorAttachment.
- Establece Attachment1 en LogAttachment. El constraint se muestra en el viewport.

En la ventana Explorer, selecciona el constraint, luego en la ventana Properties:
- Establece ActuatorType en Motor. Se mostrarán nuevos campos de propiedad.
- Establece MotorMaxForce en 50000 para aplicar hasta 50000 Rowtons de fuerza constante para lograr la velocidad lineal objetivo.
- Establece Velocity en 40 para mover el tronco 40 studs por segundo.

Verifica que la cantidad de fuerza que estableciste mueva el tronco 40 studs por segundo a lo largo del eje X negativo del mundo.
Selecciona el modo de simulación Run desde el menú desplegable del mezzanine y haz clic en el botón Play para comenzar. Studio simula la experiencia en la posición actual de la cámara sin tu avatar en el espacio 3D.

Aplicar una fuerza lineal inicial
Otra forma de cambiar la velocidad lineal de un objeto es aplicando un impulso de fuerza. Después del impulso de fuerza, el objeto desacelera hasta volverse estacionario si hay una fuerza opuesta como la fricción, o permanece en movimiento con velocidad lineal constante si no hay fuerzas opuestas.
Esta técnica es útil para mover objetos después de un evento significativo en el juego, como una explosión o colisión impactante, porque proporciona retroalimentación instantánea a los jugadores. Para demostrarlo, la siguiente subsección te enseñará cómo lanzar el personaje de un jugador hacia arriba hacia el cielo cuando colisiona con una plataforma de salto con un impulso inicial que puedes adaptar con nuevos valores para cumplir con tus propios requisitos de juego.
Usar ApplyImpulse
El método ApplyImpulse aplica fuerza a un ensamblaje completo para obtener una velocidad lineal inicial antes de desacelerar hasta detenerse cuando hay fuerzas opuestas. Para comenzar a mover el ensamblaje, el método necesita saber:
- El ensamblaje a mover.
- El eje para aplicar fuerza para alcanzar una velocidad lineal inicial.
- La cantidad de fuerza a aplicar en cada eje.
Puedes definir todos estos valores en un script. Por ejemplo, el script de muestra define el ensamblaje a mover como el objeto Humanoid del personaje del jugador, luego aplica un impulso de fuerza de 2500 Rowton-segundos para lanzar al jugador hacia arriba en el eje Y positivo del mundo. Ten en cuenta que los personajes de los jugadores tienen diferentes cantidades de masa, por lo que es posible que debas aumentar y equilibrar esta fuerza para lanzar a cada jugador sin lanzar a los personajes de jugadores con menor masa demasiado alto.
Para mover un ensamblaje utilizando ApplyImpulse:
En la ventana Explorer, expande la carpeta ApplyImpulseExample, y luego expande su modelo hijo JumpPad_DIY.
Inserta un script en la parte JumpPad.
- Pasa el cursor sobre la parte y haz clic en el botón ⊕. Se muestra un menú contextual.
- En el menú, inserta un Script. El adjunto se muestra en el centro de la parte.
- Cambia el nombre del script a JumpScript.
Reemplaza el código por defecto con el siguiente código:
local volume = script.Parentlocal function onTouched(other)local impulse = Vector3.new(0, 2500, 0)local character = other.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid and other.Name == "LeftFoot" thenother:ApplyImpulse(impulse)endendvolume.Touched:Connect(onTouched)