Menu
CoddyTech

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.

challenge icon

Desafio

Fácil

O 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 Checkpoint faz com que a posição do jogador naquele momento se torne o novo ponto de respawn.
  • Entrar na KillZone leva 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.
}
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