Menu
CoddyTech

Objetos coleccionables

Parte de la sección Física y jugabilidad del Journey de Unity de Coddy. Lección 17 de 63.

Un objeto recogible es un disparador con su propio script. Cuando algo entra, el objeto recogible comprueba que sea el jugador, le entrega su efecto y se destruye. El script del jugador conserva el resultado y ofrece un método público para ello. Este paquete de salud cura a cualquier objeto que tenga un script Health:

// HealthPack.cs
public int amount = 25;

void OnTriggerEnter(Collider other)
{
    if (other.TryGetComponent(out Health health) && health.hp < 100)
    {
        health.Heal(amount);
        Destroy(gameObject);
    }
}
// Health.cs, en el jugador
public int hp = 50;

public void Heal(int amount)
{
    hp = Mathf.Min(hp + amount, 100);
    Debug.Log("HP: " + hp);
}

other.TryGetComponent(out Health health) es false si una caja se desliza hasta el paquete, así que solo un objeto con un script Health puede recogerlo, y un jugador con la salud al máximo deja el paquete para más tarde. El paquete encuentra al jugador a través de other, así que ningún paquete necesita una referencia en el Inspector, y un nivel puede contener cincuenta de ellos. Heal es public porque otro script lo llama, y el límite de 100 está en Health, el único lugar que posee hp. Destroy(gameObject) elimina el paquete; Destroy(other.gameObject) eliminaría al jugador.

challenge icon

Desafío

Fácil

El jugador lleva un Blaster: ammo (4 al inicio) y maxAmmo (10). Las flechas lo mueven y la barra espaciadora dispara, y ambas cosas están programadas. Haz que las cajas de munición lo recarguen:

  • En Blaster.cs, agrega un método público int AddAmmo(int amount). Toma de amount tanto como quepa sin superar maxAmmo, registra el nuevo total, como Ammo: 7, y devuelve cuánto tomó.
  • En AmmoCrate.cs, cuando el jugador entre en una caja, ofrece al Blaster el amount de la caja y resta lo que tomó. Una caja que ahora esté vacía se elimina; una que aún tenga munición permanece con lo que le quede para una visita posterior.

La primera caja contiene 3 y la segunda 5. Pulsa Play, camina hacia la derecha, dispara unas cuantas veces y vuelve caminando a la segunda caja; luego, pulsa Check.

Pruébalo tú mismo

using UnityEngine;

public class AmmoCrate : MonoBehaviour
{
    public int amount = 3;

    void OnTriggerEnter(Collider other)
    {
        // El Blaster del jugador toma lo que puede; la caja conserva el resto y desaparece cuando queda vacía
    }
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Física y jugabilidad