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.
Desafio
MédioInicie 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, definalinearDampingdo Rigidbody comoaccel / topSpeed, para que a velocidade do jogador se estabilize em aproximadamentetopSpeed. - 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.Acceleratione uma aceleração deaccel. - 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
}
}
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
1Rigidbody
Gravidade e MassaEmpurrar com AddForcePular com um ImpulsoFixedUpdate para FísicaVelocidadeCorpos CinemáticosRevisão: Plataforma de Lançamento2Colisõ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 Coletar