Empurrar com AddForce
Parte da seção Física e Jogabilidade do Journey de Unity da Coddy. Lição 2 de 71.
Depois que um objeto tem um Rigidbody, a física o movimenta, então você para de alterar sua posição e, em vez disso, o empurra. rb.AddForce(force) empurra o corpo com uma força, um Vector3 em newtons. Uma força não define uma velocidade: ela acelera o corpo enquanto você continuar aplicando-a, aumentando a velocidade a cada segundo em uma quantidade igual à força dividida pela massa. Pare de empurrar e o corpo mantém a velocidade que tem.
Este hovercraft (2 kg) tem um propulsor: enquanto a seta para cima estiver pressionada, uma força de thrust o empurra para a frente, ao longo de +z. Com um impulso de 12, ele ganha 12 / 2 = 6 m/s a cada segundo:
public float thrust = 12f;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
if (Input.GetKey(KeyCode.UpArrow))
{
rb.AddForce(Vector3.forward * thrust);
}
}As forças são aplicadas em FixedUpdate(), que o Unity chama antes de cada etapa da física, 50 vezes por segundo (a lição 4 explica o motivo). Não há Time.deltaTime nessa linha: AddForce já distribui a força pela etapa, e multiplicá-la por Time.deltaTime deixaria o empurrão 50 vezes mais fraco. No chão, o atrito empurra na direção contrária, então uma força pequena pode não mover uma caixa pesada de jeito nenhum.
Desafio
FácilEmpurre o disco pelo rinque sem atrito usando forças.
- Em
FixedUpdate(), leiafloat h = Input.GetAxis("Horizontal");efloat v = Input.GetAxis("Vertical");. - Chame
rb.AddForce(new Vector3(h, 0, v) * push);, semTime.deltaTime.
Pressione “Jogar”, empurre e solte: o disco continua deslizando. Depois, “Verificar”.
Experimente você mesmo
using UnityEngine;
public class PuckPusher : MonoBehaviour
{
public float push = 4f;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
// Empurre o disco: Horizontal ao longo de x, Vertical ao longo de z
}
}
Todas as lições de Física e Jogabilidade
1Rigidbody
Gravidade e MassaEmpurrar com AddForcePular com um ImpulsoFixedUpdate para FísicaVelocidadeCorpos CinemáticosRevisão: Plataforma de Lançamento4Corrotinas
InvocarInvocar repetidamente, Cancelar invocaçãoSua primeira corrotinaLoops em corrotinasInterrompendo corrotinasRevisão: contagem regressiva10Projeto: Fuga da Arena
A ArenaCaçadores2Colisões
OnCollisionEnterO que eu acertei?Quebre no impactoNo chãoQuique e atritoFormas dos collidersRevisão: Parede destrutível5Projeto: Corrida das Moedas
A Bola RolanteMoedas para ColetarPratique por conta própria: Playground de Unity