Zonas de eliminação
Parte da seção Física e jogabilidade do Journey de Unity da Coddy. Lição 18 de 63.
Uma zona de morte é um gatilho sobre um lugar que o jogador não deve alcançar: lava, espinhos ou o espaço vazio abaixo do nível. Entrar nela envia o jogador de volta para um ponto de surgimento. Aqui, o próprio script da lava faz isso, com o ponto de surgimento em um campo Transform definido no Inspector:
public Transform spawnPoint;
void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Player"))
{
other.transform.position = spawnPoint.position;
other.attachedRigidbody.linearVelocity = Vector3.zero;
}
}other.attachedRigidbody é o Rigidbody ao qual o colisor que está entrando pertence. Definir transform.position teletransporta o jogador, que é o que um reaparecimento precisa. Porém, um Rigidbody mantém sua velocidade durante o salto: um jogador que caiu a 10 unidades por segundo chega ao ponto de surgimento ainda caindo a 10, e quem correu para dentro da lava continua correndo, direto de volta para ela. Definir linearVelocity como Vector3.zero faz com que ele chegue parado. A verificação da tag deixa no lugar qualquer outra coisa que caia na lava.
Desafio
FácilO jogador atravessa uma ponte estreita sobre o vazio, impulsionado por forças pelas teclas de seta; essa parte já está escrita. Um gatilho com a tag KillZone ocupa o espaço abaixo, e uma bandeira com a tag Checkpoint, também um gatilho, fica na metade da ponte. Adicione pontos de respawn ao script do jogador:
- Quando o jogo começar, o ponto de respawn será onde o jogador estiver.
- Tocar em um
Checkpointfaz com que a posição do jogador naquele momento se torne o novo ponto de respawn. - Entrar na
KillZoneleva o jogador de volta ao ponto de respawn, parado.
Pressione Play e saia da ponte, depois Check.
Experimente você mesmo
using UnityEngine;
public class Player : MonoBehaviour
{
public float force = 12f;
Rigidbody body;
Vector3 input;
// respawn: onde o jogador reaparece
void Start()
{
body = GetComponent<Rigidbody>();
}
void Update()
{
input = new Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical"));
}
void FixedUpdate()
{
body.AddForce(input * force);
}
// Checkpoint: guarda a posição do jogador. KillZone: volta para esse ponto, parado.
}
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