Menu
CoddyTech

Zonas mortais

Parte da seção Física e Jogabilidade do Journey de Unity da Coddy. Lição 19 de 71.

Uma zona de morte é um gatilho sobre um lugar que o jogador não deve alcançar: lava, espinhos ou o espaço vazio sob o nível. Ao entrar nela, o jogador 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 collider que está entrando pertence. Definir transform.position teletransporta o jogador, que é o que um reaparecimento exige. Mas 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

Faça o jogador reaparecer. Este script está no jogador, então ele move transform e body, não other.

  1. Em Start(), defina o campo Vector3 respawn como transform.position.
  2. Em OnTriggerEnter(Collider other), quando other.CompareTag("Checkpoint"), defina respawn = transform.position;.
  3. Quando other.CompareTag("KillZone"), defina transform.position = respawn; e body.linearVelocity = Vector3.zero;.

Pressione “Jogar” e saia da ponte andando. Depois, “Verificar”.

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, sem se mover.
}

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

Pratique por conta própria: Playground de Unity