Menu
CoddyTech

Velocidade

Parte da seção Física e Jogabilidade do Journey de Unity da Coddy. Lição 5 de 71.

rb.linearVelocity indica como o corpo está se movendo no momento: um Vector3 em metros por segundo ao longo dos eixos x, y e z. Lê-lo mostra para onde o corpo está indo, e rb.linearVelocity.magnitude é sua velocidade. Defini-lo altera o movimento imediatamente, sem aceleração gradual e sem envolver a massa: uma caixa de 1 kg e um cofre de 50 kg definidos para 2 m/s passam a se mover exatamente a 2 m/s a partir da próxima etapa da física. A gravidade, o atrito e os impactos continuam agindo sobre ele depois disso.

Este kart anda para a frente exatamente a cruise m/s. Ele copia a velocidade, altera apenas z e a atribui de volta, então o valor de y dado pela gravidade permanece e o kart ainda cai ao chegar ao fim de uma rampa:

void FixedUpdate()
{
    Vector3 vel = rb.linearVelocity;
    vel.z = cruise;            // para a frente a exatamente cruise m/s
    rb.linearVelocity = vel;   // y mantém o valor resultante da gravidade
}

Definir y como 0 também descartaria a velocidade causada pela gravidade em cada etapa, e o kart desceria lentamente ao sair da rampa, em vez de cair. Antes do Unity 6, essa propriedade se chamava velocity. Tutoriais antigos ainda escrevem rb.velocity: no Unity 6, isso compila, com um aviso de que velocity está obsoleto e foi renomeado para linearVelocity. drag virou linearDamping da mesma forma. Use os nomes novos.

challenge icon

Desafio

Fácil

Faça o robô andar exatamente a speed m/s e deixe-o cair da borda.

  1. Em FixedUpdate(), leia float h = Input.GetAxisRaw("Horizontal"); e obtenha float v de "Vertical".
  2. Defina rb.linearVelocity = new Vector3(h * speed, rb.linearVelocity.y, v * speed);, mantendo o y da gravidade.

Pressione “Jogar” e caminhe para fora da borda: o robô para quando você solta o botão e cai. Em seguida, pressione “Verificar”.

Experimente você mesmo

using UnityEngine;

public class RobotWalk : MonoBehaviour
{
    public float speed = 3f;
    private Rigidbody rb;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    void FixedUpdate()
    {
        // Mova-se exatamente à velocidade speed com as setas, mantendo o y da gravidade
    }
}

Todas as lições de Física e Jogabilidade

Pratique por conta própria: Playground de Unity