Objetos em movimento são objetos que se movem em um ou mais eixos dentro do espaço 3D. Usando o poder embutido do motor de simulação da Roblox, você pode fazer objetos se moverem e interagirem com seu ambiente de uma maneira que emula o comportamento físico do mundo real que é familiar e intuitivo para os jogadores, como gravidade, aerodinâmica e atrito.
Usando o arquivo Objetos em Movimento .rbxl como referência, este tutorial explica como as forças físicas impactam o movimento linear no Studio e mostra várias técnicas para mover objetos do ponto A ao ponto B em seus jogos com diferentes comportamentos de movimento, incluindo orientações sobre:
- Usar uma restrição LinearVelocity para mover um conjunto inteiro a uma velocidade linear constante.
- Usar uma PrismaticConstraint para restringir um conjunto a um único eixo e movê-lo a uma velocidade linear constante em relação a um ponto no espaço 3D.
- Usar o método ApplyImpulse para mover um conjunto com um impulso inicial de força, de modo que o conjunto desacelere lentamente ao longo do tempo.
Movimento linear e forças físicas
O Roblox Studio é um motor de simulação do mundo real que emula o comportamento físico em tempo real, então, para prever como objetos em movimento linear podem se comportar em jogos, é importante ter uma compreensão de alto nível de como os objetos se movem na vida real com movimento linear.
Movimento linear é o movimento ao longo de um eixo. Por exemplo, quando um bloco tem movimento linear, ele se move ao longo de um eixo definido.

O movimento linear não pode existir sem forças físicas externas empurrando ou puxando objetos para se mover. De acordo com a primeira lei do movimento de Newton, objetos estacionários permanecem estacionários e objetos em movimento permanecem em movimento com uma velocidade constante, a menos que sejam afetados por uma força externa. Por exemplo, um bloco estacionário permanece estacionário, a menos que uma força física como o vento o empurre para se mover.
Força é a medida da direção e magnitude de um empurrão ou puxão físico que faz com que os objetos mudem sua velocidade linear ao longo de um eixo. Uma mudança na velocidade é conhecida como aceleração. Este conceito é particularmente importante para objetos se moverem no Studio; quanto mais força você aplica aos objetos, mais rapidamente eles aceleram.
Isso ocorre porque a força precisa ser maior do que quaisquer forças físicas que empurrem contra o objeto, como gravidade ou atrito. Por exemplo, se você colocasse o bloco em uma placa de metal, a força física do vento precisaria superar a quantidade de atrito da placa de metal para continuar acelerando o bloco. Se a força do vento não for muito maior do que o atrito da placa de metal, o bloco acelera, mas mais lentamente do que no exemplo anterior.

Velocidade linear é a medida do movimento de um objeto, ou quão rápido o objeto muda sua posição ao longo de um eixo ao longo do tempo. O Studio mede a velocidade linear de acordo com quantos studs um objeto se move por segundo. Studs são as unidades físicas primárias da Roblox para medir comprimento, e cada stud equivale a cerca de 28cm no mundo real.

Compreender a velocidade linear é importante para projetar a jogabilidade porque ajuda você a determinar quanta força você precisa para alcançar uma velocidade particular para seus objetos em movimento. Por exemplo, quando você quer impulsionar objetos para cima, é importante considerar como você deve ajustar sua força para superar a gravidade dentro do ambiente, de modo que os objetos se movam com precisão.
As seções a seguir mergulham mais fundo nesses conceitos enquanto você aprende a mover objetos a uma velocidade linear constante ou inicial com a força necessária para superar quaisquer forças físicas opostas dentro do ambiente. À medida que você revisa esses conceitos de física com as técnicas que se seguem, poderá prever com mais precisão como ajustar os valores das propriedades para alcançar qualquer comportamento ideal de movimento linear no Studio.
Manter uma velocidade linear constante
Para que um objeto alcance e mantenha uma velocidade linear constante, ele precisa de uma força para superar quaisquer forças físicas opostas que desacelerem a velocidade linear do objeto ou façam com que o objeto permaneça estacionário. Por exemplo, se você quiser que um objeto tenha uma velocidade linear de [0, 12, 0] no Studio, você precisa de força suficiente para que o objeto alcance e mantenha 12 studs por segundo ao longo do eixo Y em seu ambiente.
A quantidade de força necessária não depende apenas das forças físicas opostas dentro do próprio ambiente, como gravidade e atrito, mas também do próprio objeto. Por exemplo, se você tiver dois objetos da mesma forma que estão se movendo no mesmo eixo, o objeto com a maior quantidade de massa requer mais força para alcançar a mesma aceleração linear.
As subseções a seguir usam conjuntos de diferentes formas e tamanhos para ensinar como mover um objeto inteiro ou apenas uma parte do objeto a uma velocidade linear constante. À medida que você experimenta diferentes valores de propriedades, aprenderá a estimar a quantidade máxima de força que você precisa para conjuntos em seus próprios jogos.
Usar restrições LinearVelocity
Objetos LinearVelocity são um tipo de restrição de mover que aplicam força em um conjunto inteiro para manter uma velocidade linear constante. Ao não travar a posição do conjunto em um eixo durante seu movimento, o conjunto está livre para girar à medida que colide com outros objetos no espaço 3D. Esse tipo de movimento leva a cenários de jogabilidade surpreendentes que são mais difíceis para os jogadores preverem.
Para começar a mover o conjunto, a restrição LinearVelocity precisa saber:
- O ponto e a direção positiva ou negativa para aplicar uma força.
- A quantidade de studs que você deseja que o conjunto se mova por segundo.
- A quantidade máxima de força que o motor pode aplicar para que o conjunto alcance a velocidade linear constante.
Para demonstrar esse processo, você configurará um lírio com um anexo que uma restrição LinearVelocity referencia para mover o lírio 15 studs por segundo ao longo do eixo X negativo do mundo a uma velocidade linear constante.

Adicionar anexo
Você pode especificar o ponto para aplicar força adicionando um objeto Attachment ao conjunto e, em seguida, configurando a posição do anexo no espaço 3D. O jogo de exemplo Objetos em Movimento coloca um anexo no centro do lírio para que a restrição possa mover a malha a partir do anexo ao longo de um eixo particular.
Os anexos incluem auxílios visuais para ajudá-lo a visualizar seus eixos de movimento. A seta amarela denota o eixo primário do anexo, e a seta laranja denota o eixo secundário do anexo. Embora nenhum dos eixos de movimento influencie o movimento do lírio nos passos desta técnica, é importante entender esses auxílios visuais para referência futura, pois eles podem ajudá-lo a determinar o comportamento ideal para diferentes tipos de restrições, como a PrismaticConstraint na próxima técnica.

Para adicionar um anexo:
Na janela Explorer, expanda a pasta LinearVelocityExample, em seguida, expanda seu modelo filho LilyPad_DIY.
Insira um anexo na malha Pad.
- Passe o mouse sobre a malha e clique no botão ⊕. Um menu contextual é exibido.
- No menu, insira um Attachment. O anexo é exibido no centro da parte.
- Renomeie o anexo para MoveAttachment.

Configurar restrição
Agora que sua malha tem um ponto fixo para mover o lírio, você pode configurar as propriedades de uma restrição LinearVelocity para especificar a direção e a magnitude para a velocidade linear constante, a quantidade de studs que você deseja que a malha se mova por segundo e a quantidade máxima de força que o motor pode aplicar para que a malha alcance uma velocidade linear constante.
O jogo de exemplo Objetos em Movimento aplica até 5000 Rowtons de força constante para mover o lírio 15 studs por segundo ao longo do eixo X negativo do mundo a uma velocidade linear constante. Rowtons são as unidades físicas primárias da Roblox para medir força. Para referência sobre as unidades físicas da Roblox e como elas se convertem em unidades métricas, consulte Unidades Roblox.
Para configurar uma restrição LinearVelocity:
Para tornar a restrição visível na viewport para que você possa referenciar sua direção linear, ative Mostrar Detalhes da Restrição no menu Visualizar do Studio.
Insira uma restrição LinearVelocity na malha Pad.
- Na janela Explorer, passe o mouse sobre a malha e clique no ícone ⊕. Um menu contextual é exibido.
- No menu contextual, insira LinearVelocity.
Atribua o anexo da malha à nova restrição.
- Na janela Explorer, selecione a restrição.
- Na janela Propriedades,
- Defina Attachment0 como MoveAttachment.
- Defina MaxForce como 5000 para aplicar até 5000 Rowtons de força constante para alcançar a velocidade linear alvo.
- Mantenha RelativeTo como World para mover o lírio em relação à posição e orientação do mundo.
- Defina VelocityConstraint como Line para restringir a força ao longo de uma linha a partir do anexo.
- Defina LineDirection como -1, 0, 0 para mover o lírio ao longo do eixo X negativo do mundo. Observe que se você definir essa propriedade como 1, 0, 0, o lírio se moverá ao longo do eixo X positivo do mundo.
- Defina LineVelocity como 15 para mover o lírio 15 studs por segundo.

Verifique se a quantidade de força que você definiu move a malha 15 studs por segundo ao longo do eixo X negativo do mundo.
Selecione o modo de simulação Executar no menu suspenso do mezanino e clique no botão Reproduzir para começar. O Studio simula o jogo na posição atual da câmera sem seu avatar no espaço 3D.

Usar restrições PrismaticConstraint
Objetos PrismaticConstraint são um tipo de restrição mecânica que criam uma junta rígida entre dois anexos, permitindo que seus conjuntos pai se movam ao longo de um eixo em relação um ao outro. Ao travar a posição de ambos os conjuntos em um único eixo, cada conjunto só pode girar se eles girarem juntos na mesma direção.
Esse tipo de movimento leva a cenários de jogabilidade estáveis que são mais fáceis para os jogadores preverem. Por exemplo, o jogo de exemplo Objetos em Movimento usa objetos PrismaticConstraint para mover plataformas de troncos que os jogadores podem usar para atravessar cuidadosamente um enorme rio.
Quando você define PrismaticConstraint.ActuatorType como Motor, essa restrição aplica força nos dois anexos com o objetivo de que os anexos alcancem e mantenham uma velocidade linear constante. Se você ancorar um dos conjuntos pai dos anexos, a força continuará a mover o conjunto não ancorado a uma velocidade linear constante enquanto o conjunto ancorado permanece estacionário.
Para começar a mover o conjunto, a restrição PrismaticConstraint precisa saber:
- O ponto e a direção positiva ou negativa para aplicar uma força.
- A quantidade de studs que você deseja que os anexos se movam por segundo.
- A quantidade máxima de força que o motor pode aplicar para que os anexos e seus conjuntos pai alcancem uma velocidade linear constante.
Para demonstrar esse processo, você configurará um conjunto de troncos com dois objetos que têm anexos filhos que uma PrismaticConstraint referencia para mover o tronco 40 studs por segundo ao longo do eixo X negativo do mundo a uma velocidade linear constante.

Configurar anexos
Você pode especificar a direção para mover um objeto particular dentro de um conjunto adicionando dois objetos Attachment ao conjunto e, em seguida, configurando seu alinhamento e orientação no espaço 3D. O jogo de exemplo Objetos em Movimento alinha dois anexos ao longo do eixo X do mundo perto da posição onde o tronco não ancorado se sobrepõe à parte ancorada e orienta o eixo primário de cada anexo para enfrentar o eixo X negativo do mundo.
Quando você configurar sua restrição PrismaticConstraint na próxima seção, ela moverá o tronco em relação à parte âncora. Em outras palavras, o tronco se moverá para longe da parte estacionária que não pode se mover porque está ancorada no espaço 3D.
Para configurar anexos para a restrição prismática:
Na janela Explorer, expanda a pasta PrismaticConstraintExample, em seguida, expanda seu modelo filho Log_DIY.
Insira um anexo na malha Log.
- Passe o mouse sobre a malha e clique no botão ⊕. Um menu contextual é exibido.
- No menu, insira um Attachment. O anexo é exibido no centro da parte.
- Renomeie o anexo para LogAttachment.

Usando o mesmo processo, insira um anexo na parte Anchor e, em seguida, renomeie o anexo para AnchorAttachment.

Usando a ferramenta View Selector como referência para as coordenadas do mundo, gire LogAttachment e AnchorAttachment até que o eixo primário de cada anexo enfrente o eixo X negativo do mundo.

Reposicione AnchorAttachment para que ambos os anexos estejam alinhados no eixo X do mundo.

Configurar restrição
Agora que seus anexos estão alinhados no mesmo eixo e enfrentam a mesma direção que você deseja que o tronco se mova, você pode configurar as propriedades de uma restrição PrismaticConstraint para especificar se deve aplicar a velocidade linear constante alvo na direção positiva ou negativa do eixo primário de cada anexo, a quantidade de studs que você deseja que os anexos se movam por segundo e a quantidade máxima de força que o motor pode aplicar para que o tronco alcance uma velocidade linear constante.
Embora você possa escolher valores diferentes para seus próprios casos de uso, o jogo de exemplo Objetos em Movimento aplica até 50000 Rowtons de força constante para mover os anexos 40 radianos por segundo ao longo do eixo X negativo do mundo a uma velocidade linear constante. No entanto, como o anexo âncora está em um objeto ancorado, apenas o anexo do tronco pode se mover.
Para configurar uma restrição prismática:
Insira um objeto PrismaticConstraint na malha Log.
- Na janela Explorer, passe o mouse sobre a malha e clique no ícone ⊕. Um menu contextual é exibido.
- No menu contextual, insira uma PrismaticConstraint.
Atribua os anexos do tronco à nova restrição para que o tronco se mova em relação a a parte do bloco ancorado.
- Na janela Explorer, selecione a restrição.
- Na janela Propriedades,
- Defina Attachment0 como AnchorAttachment.
- Defina Attachment1 como LogAttachment. A restrição é exibida na viewport.

Na janela Explorer, selecione a restrição e, em seguida, na janela Propriedades:
- Defina ActuatorType como Motor. Novos campos de propriedade são exibidos.
- Defina MotorMaxForce como 50000 para aplicar até 50000 Rowtons de força constante para alcançar a velocidade linear alvo.
- Defina Velocity como 40 para mover o tronco 40 studs por segundo.

Verifique se a quantidade de força que você definiu move o tronco 40 studs por segundo ao longo do eixo X negativo do mundo.
Selecione o modo de simulação Executar no menu suspenso do mezanino e clique no botão Reproduzir para começar. O Studio simula o jogo na posição atual da câmera sem seu avatar no espaço 3D.

Aplicar uma força linear inicial
Outra maneira de mudar a velocidade linear de um objeto é aplicando um impulso de força. Após o impulso de força, o objeto desacelera até se tornar estacionário se houver uma força oposta, como atrito, ou permanece em movimento com velocidade linear constante se não houver forças opostas.
Essa técnica é útil para mover objetos após um evento significativo de jogabilidade, como uma explosão ou colisão impactante, porque fornece feedback instantâneo aos jogadores. Para demonstrar, a subseção a seguir ensina como lançar o personagem de um jogador para cima em direção ao céu quando ele colide com uma plataforma de salto com um impulso inicial que você pode adaptar com novos valores para atender aos seus próprios requisitos de jogabilidade.
Usar ApplyImpulse
O método ApplyImpulse aplica força em um conjunto inteiro para obter uma velocidade linear inicial antes de desacelerar até parar quando há forças opostas. Para começar a mover o conjunto, o método precisa saber:
- O conjunto a ser movido.
- O eixo para aplicar força para alcançar uma velocidade linear inicial.
- A quantidade de força a ser aplicada em cada eixo.
Você pode definir todos esses valores em um script. Por exemplo, o script de exemplo define o conjunto a ser movido como o objeto Humanoid do personagem do jogador e, em seguida, aplica um impulso de força de 2500 Rowton-segundos para lançar o jogador para cima no eixo Y positivo do mundo. Observe que os personagens dos jogadores têm diferentes quantidades de massa, então você pode precisar aumentar e equilibrar essa força para lançar cada jogador sem lançar personagens com menores quantidades de massa muito alto.
Para mover um conjunto usando ApplyImpulse:
Na janela Explorer, expanda a pasta ApplyImpulseExample, em seguida, expanda seu modelo filho JumpPad_DIY.
Insira um script na parte JumpPad.
- Passe o mouse sobre a parte e clique no botão ⊕. Um menu contextual é exibido.
- No menu, insira um Script. O anexo é exibido no centro da parte.
- Renomeie o script para JumpScript.
Substitua o código padrão pelo seguinte 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)