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 emule o comportamento físico do mundo real, que é familiar e intuitivo para os jogadores, como gravidade, aerodinâmica e atrito.
Usando o arquivo Moving Objects .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 suas experiências com diferentes comportamentos de movimento, incluindo orientações sobre:
- Usar a restrição de mover LinearVelocity para mover uma assembleia inteira com uma velocidade linear constante.
- Usar um PrismaticConstraint para restringir uma assembleia a um único eixo e movê-la com uma velocidade linear constante em relação a um ponto no espaço 3D.
- Usar o método ApplyImpulse para mover uma assembleia com um impulso inicial de força, de modo que a assembleia desacelere lentamente ao longo do tempo.
Movimento linear e forças físicas
Roblox Studio é um motor de simulação do mundo real que emula o comportamento físico em tempo real, portanto, para prever como objetos que se movem linearmente se comportam em experiências, é 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 os objetos para se mover. De acordo com a primeira lei do movimento de Newton, objetos estacionários permanecem estacionários e objetos em movimento continuam 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 que os objetos se movam no Studio; quanto mais força você aplica aos objetos, mais rápido eles aceleram.
Isso ocorre porque a força precisa ser maior do que quaisquer forças físicas que estejam empurrando para trás contra o objeto, como gravidade ou atrito. Por exemplo, se você colocar o bloco em uma placa de metal, a força física do vento precisa superar a quantidade de atrito da placa de metal para continuar acelerando o bloco. Se a força do vento não é muito maior do que o atrito da placa de metal, o bloco acelera, só que 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 principais da Roblox para medir comprimento, e cada stud equivale a cerca de 28 cm no mundo real.

Entender a velocidade linear é importante para projetar a jogabilidade em suas experiências, pois ajuda você a determinar quanta força você precisa para alcançar uma velocidade particular para seus objetos em movimento. Por exemplo, quando você deseja propulsar objetos para cima, é importante considerar como você deve ajustar sua força para superar a gravidade dentro do ambiente para que os objetos se movam com precisão.
As seções a seguir se aprofundam 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 físicos com as próximas técnicas, poderá prever mais precisamente 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ê deseja 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 depende não apenas das forças físicas opostas dentro do próprio ambiente, como gravidade e atrito, mas também do objeto em si. Por exemplo, se você tiver dois objetos da mesma forma se movendo no mesmo eixo, o objeto com uma maior quantidade de massa requer mais força para alcançar a mesma aceleração linear.
As próximas subseções usam assembleias 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 com diferentes valores de propriedades, aprenderá como estimar a maior quantidade de força que você precisa para assembleias em suas próprias experiências.
Usar restrições LinearVelocity
Objetos LinearVelocity são um tipo de restrição de mover que aplicam força em uma assembleia inteira para manter uma velocidade linear constante. Ao não travar a posição da assembleia em um eixo durante seu movimento, a assembleia tem liberdade para girar ao colidir 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 a assembleia, 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 a assembleia se mova por segundo.
- A quantidade máxima de força que o motor pode aplicar para que a assembleia alcance a velocidade linear constante.
Para demonstrar esse processo, você configurará uma folha de vitória com uma conexão que a restrição LinearVelocity referencia para mover a folha de vitória 15 studs por segundo ao longo do eixo X negativo do mundo a uma velocidade linear constante.

Adicionar conexão
Você pode especificar o ponto para aplicar força adicionando um objeto Attachment à assembleia e, em seguida, configurando a posição da conexão no espaço 3D. A experiência de exemplo Moving Objects coloca uma conexão no centro da folha de vitória para que a restrição possa mover a malha da conexão ao longo de um eixo específico.
As conexões incluem auxílios visuais para ajudá-lo a visualizar seus eixos de movimento. A seta amarela denota o eixo principal da conexão, e a seta laranja denota o eixo secundário da conexão. Embora nenhum dos eixos de movimento influencie o movimento da folha de vitória nos passos desta técnica, é importante entender esses auxílios visuais para referência futura, pois podem ajudar a determinar o comportamento ideal para diferentes tipos de restrições, como o PrismaticConstraint na próxima técnica.

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

Configurar restrição
Agora que sua malha tem um ponto fixo para mover a folha de vitória, você pode configurar as propriedades da 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 a malha alcançar uma velocidade linear constante.
A experiência de amostra Moving Objects aplica até 5000 Rowtons de força constante para mover a folha de vitória 15 studs por segundo ao longo do eixo X negativo do mundo a uma velocidade linear constante. Rowtons são as unidades físicas principais da Roblox para medir força. Para referência sobre 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 no viewport, a fim de que você possa referenciar sua direção linear, habilite Show Constraint Details no menu View 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 a conexão da malha à nova restrição.
- Na janela Explorer, selecione a restrição.
- Na janela Properties,
- Defina Attachment0 como MoveAttachment.
- Defina MaxForce como 5000 para aplicar até 5000 Rowtons de força constante para alcançar a velocidade linear desejada.
- Mantenha RelativeTo como World para mover a folha de vitória 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 da conexão.
- Defina LineDirection como -1, 0, 0 para mover a folha de vitória ao longo do eixo X negativo do mundo. Observe que se você definir esta propriedade como 1, 0, 0, a folha de vitória se moverá ao longo do eixo X positivo do mundo.
- Defina LineVelocity como 15 para mover a folha de vitória 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 Run no menu suspenso do mezanino e clique no botão Play para começar. O Studio simula a experiência 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 duas conexões, permitindo que suas assembleias pai se movam ao longo de um eixo em relação uma à outra. Ao travar a posição de ambas as assembleias em um único eixo, cada assembleia só pode girar se elas girarem juntas 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, a experiência de exemplo Moving Objects 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 nas duas conexões com o objetivo de que as conexões alcancem e mantenham uma velocidade linear constante. Se você ancorar uma das peças pai de uma das conexões, a força continuará a mover a assembleia não ancorada a uma velocidade linear constante enquanto a assembleia ancorada permanecerá estacionária.
Para começar a mover a assembleia, 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 as conexões se movam por segundo.
- A quantidade máxima de força que o motor pode aplicar para que as conexões e suas assembleias pai alcancem uma velocidade linear constante.
Para demonstrar esse processo, você configurará uma assembleia de troncos com dois objetos que têm conexões filhas 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 conexões
Você pode especificar a direção para mover um objeto particular dentro de uma assembleia adicionando dois objetos Attachment à assembleia e, em seguida, configurando seu alinhamento e orientação no espaço 3D. A experiência de exemplo Moving Objects alinha duas conexões ao longo do eixo X do mundo perto da posição onde o tronco não ancorado se sobrepõe à peça ancorada, e orienta cada eixo principal da conexão para apontar para 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 à peça ancorada. Em outras palavras, o tronco se moverá para longe da peça estacionária que não pode se mover porque está ancorada no espaço 3D.
Para configurar conexões para a restrição prismática:
Na janela Explorer, expanda a pasta PrismaticConstraintExample, em seguida, expanda seu modelo filho Log_DIY.
Insira uma conexão na malha Log.
- Passe o mouse sobre a malha e clique no botão ⊕. Um menu contextual é exibido.
- No menu, insira uma Attachment. A conexão aparece no centro da parte.
- Renomeie a conexão para LogAttachment.

Usando o mesmo processo, insira uma conexão na parte Anchor e, em seguida, renomeie a conexão para AnchorAttachment.

Usando a ferramenta View Selector como referência para as coordenadas do mundo, gire LogAttachment e AnchorAttachment até que o eixo principal de cada conexão aponte para o eixo X negativo do mundo.

Reposicione AnchorAttachment para que ambas as conexões estejam alinhadas no eixo X do mundo.

Configurar restrição
Agora que suas conexões estão alinhadas no mesmo eixo e voltadas na 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 principal de cada conexão, a quantidade de studs que você deseja que as conexões 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, a experiência de amostra Moving Objects aplica até 50000 Rowtons de força constante para mover as conexões 40 radianos por segundo ao longo do eixo X negativo do mundo a uma velocidade linear constante. No entanto, como a conexão âncora está em um objeto ancorado, apenas a conexão 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 as conexões do tronco à nova restrição para que o tronco se mova em relação a a peça bloqueada ancorada.
- Na janela Explorer, selecione a restrição.
- Na janela Properties,
- Defina Attachment0 como AnchorAttachment.
- Defina Attachment1 como LogAttachment. A restrição é exibida no viewport.

Na janela Explorer, selecione a restrição e, em seguida, na janela Properties:
- Defina ActuatorType como Motor. Novos campos de propriedades são exibidos.
- Defina MotorMaxForce como 50000 para aplicar até 50000 Rowtons de força constante para alcançar a velocidade linear desejada.
- 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 Run no menu suspenso do mezanino e clique no botão Play para começar. O Studio simula a experiência 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, pois 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 um tapete de pulo 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 uma assembleia inteira para obter uma velocidade linear inicial antes de desacelerar até parar quando há forças opostas. Para começar a mover a assembleia, o método precisa saber:
- A assembleia a ser movida.
- 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 amostra define a assembleia a ser movida como o objeto Humanoid do personagem do jogador, e então 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 todos os jogadores sem lançar jogadores com menores quantidades de massa muito alto.
Para mover uma assembleia 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. A conexão aparece 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)