Ir para o conteúdo
ReadySpawn

Como fazer um jogo de direção no Unity: um controlador de carro arcade

Por Imersa Studios · Atualizado em

Para uma sensação arcade, conduza um Rigidbody com forças: acelere na direção frontal do carro, vire conforme a velocidade e cancele a velocidade lateral para dar aderência. Use WheelColliders só quando precisar de suspensão realista. O script abaixo é um ponto de partida funcional.

1. Monte o carro

  • Crie uma malha de carro com o pivô no centro e adicione um BoxCollider.
  • Adicione um Rigidbody: massa em torno de 1000, drag baixo, angular drag moderado.
  • Adicione o script abaixo e um collider de chão plano para testar.

2. O controlador

using UnityEngine;

[RequireComponent(typeof(Rigidbody))]
public class ArcadeCar : MonoBehaviour
{
    public float acceleration = 25f;
    public float maxSpeed = 30f;
    public float turnSpeed = 90f;
    public float grip = 6f;

    Rigidbody rb;
    float throttle, steer;

    void Awake()
    {
        rb = GetComponent<Rigidbody>();
        rb.centerOfMass = new Vector3(0f, -0.5f, 0f); // low centre = harder to flip
    }

    void Update()
    {
        throttle = Input.GetAxis("Vertical");
        steer = Input.GetAxis("Horizontal");
    }

    void FixedUpdate()
    {
        Vector3 forward = transform.forward;
        float speed = Vector3.Dot(rb.linearVelocity, forward);

        if (Mathf.Abs(speed) < maxSpeed)
            rb.AddForce(forward * throttle * acceleration, ForceMode.Acceleration);

        // Steering scales with speed so the car cannot spin on the spot.
        float dir = speed < -0.1f ? -1f : 1f;
        float turn = steer * turnSpeed * Mathf.Clamp01(Mathf.Abs(speed) / 5f) * dir;
        rb.MoveRotation(rb.rotation * Quaternion.Euler(0f, turn * Time.fixedDeltaTime, 0f));

        // Cancel sideways velocity: this is the grip.
        Vector3 lateral = Vector3.Dot(rb.linearVelocity, transform.right) * transform.right;
        rb.AddForce(-lateral * grip, ForceMode.Acceleration);
    }
}

Usa linearVelocity do Unity 6. Em versões mais antigas, use velocity. Usa os eixos do Input Manager clássico; com o novo Input System, leia os mesmos valores das suas ações.

3. Ajuste a sensação

Para obterMude
Carro solto, que derrapaReduza a aderência (2 a 3)
Carro firme, esportivoAumente a aderência (8 a 12) e baixe o centro de massa
Sensação mais pesadaAumente a massa e reduza a aceleração
Curvas mais fechadasAumente turnSpeed

Adicione uma câmera que segue por trás com um pouco de atraso e áudio de motor que sobe com a velocidade para vender a sensação.

4. WheelColliders ou não?

WheelColliders simulam suspensão e atrito dos pneus, o que serve para simuladores de corrida mas exige ajuste. Para jogos de crime em mundo aberto e corridas arcade, a abordagem por forças acima é mais fácil de deixar divertida.

5. Adicione tráfego

Uma rua sem carros parece morta. O Traffic System dá carros com IA que seguem faixas e param em cruzamentos, para você focar no seu carro. Leia como fazer pedestres NPC e IA de tráfego para ver como funciona.

Perguntas frequentes

Quem escreveu

Imersa Studios cria os sistemas Unity, packs low poly e guias vendidos no itch.io. O código e as técnicas daqui vêm de lançar esses produtos. Saiba mais sobre o estúdio.