A Arena
Parte da seção Física e Jogabilidade do Journey de Unity da Coddy. Lição 59 de 71.
Este capítulo cria Arena Escape. Você desvia dos caçadores em uma arena murada enquanto ondas deles chegam, três acertos encerram a partida e, quando a última onda termina, uma saída se abre. O jogo tem cinco scripts, presentes no projeto desde o início: Player, Hunter, Spawner, Health e Exit. Os quatro últimos estão vazios por enquanto, e cada lição preenche um deles.
O jogador se move com forças, em vez de definir uma velocidade, então o empurrão de um caçador se soma ao movimento em vez de ser anulado. Um impulso sozinho faria o jogador acelerar para sempre, por isso linearDamping reduz um pouco sua velocidade a cada etapa: um impulso constante se estabiliza em uma 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ó atinge 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ó usa um PhysicsMaterial sem atrito: se houvesse atrito do chão além do amortecimento, ele atingiria uma velocidade máxima menor.
Desafio
MédioInicie Arena Escape: o jogador desliza usando forças.
- Em
Start(), após a linhaGetComponent, definarb.linearDamping = accel / topSpeed;para que a velocidade se estabilize perto detopSpeed. - Em
FixedUpdate(), crienew Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical")). - Passe o valor
normalizedmultiplicado poraccelpararb.AddForcecomForceMode.Acceleration.
Pressione “Jogar” e deslize pela arena. Depois, “Verificar”.
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
}
}
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