Menu
CoddyTech

A Arena

Parte da seção Física e jogabilidade do Journey de Unity da Coddy. Lição 56 de 63.

Neste capítulo, você vai criar Arena Escape. Você desvia dos caçadores em uma arena murada enquanto ondas deles invadem o local; três golpes encerram a partida e, quando a última onda acaba, uma saída se abre. O jogo tem cinco scripts, já no projeto desde o início: Player, Hunter, Spawner, Health e Exit. Os últimos quatro estão vazios por enquanto, e cada aula preencherá um deles.

O jogador se move com forças, em vez de definir uma velocidade, então o impulso de um caçador se soma ao movimento, em vez de ser apagado. Um empurrão sozinho o faria acelerar para sempre, então linearDamping reduz parte da sua velocidade a cada passo: um empurrão constante se estabiliza numa velocidade máxima de cerca de aceleração dividida pelo amortecimento. Este trenó flutuante avança enquanto a tecla Espaço está pressionada:

[SerializeField] private float accel = 12f;
private Rigidbody rb;

void Start()
{
    rb = GetComponent<Rigidbody>();
    rb.linearDamping = 2f;
}

void FixedUpdate()
{
    if (Input.GetKey(KeyCode.Space))
    {
        rb.AddForce(transform.forward * accel, ForceMode.Acceleration);
    }
}

Com uma aceleração de 12 e um amortecimento de 2, o trenó chega a uma velocidade máxima próxima de 6 unidades por segundo e, quando a tecla Espaço é solta, o amortecimento o faz parar, em vez de deixá-lo deslizar para sempre. ForceMode.Acceleration ignora a massa, então um trenó pesado acelera exatamente como um leve. O colisor do trenó tem um PhysicsMaterial sem atrito: com o atrito do chão somado ao amortecimento, a velocidade máxima seria menor.

challenge icon

Desafio

Médio

Inicie Arena Escape com o jogador. O Inspector fornece ao script Player os valores accel (18) e topSpeed (6). O jogador tem massa 2 e um material sem atrito, e os outros quatro scripts permanecem vazios por enquanto.

  • Em Start, defina linearDamping do Rigidbody como accel / topSpeed, para que a velocidade do jogador se estabilize em aproximadamente topSpeed.
  • A cada etapa da física, empurre o jogador com as setas: esquerda e direita ao longo de x, e para cima e para baixo ao longo de z, usando ForceMode.Acceleration e uma aceleração de accel.
  • Normalize a direção das setas, para que o movimento na diagonal não seja mais rápido do que em linha reta.

Pressione Play e deslize pela arena; depois, clique em Check.

Experimente você mesmo

using UnityEngine;

public class Player : MonoBehaviour
{
    [SerializeField] private float accel = 18f;
    [SerializeField] private float topSpeed = 6f;
    private Rigidbody rb;

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

    void FixedUpdate()
    {
        // defina o amortecimento e depois mova o jogador com as teclas de seta
    }
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

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