Menu
CoddyTech

Objetos coleccionables

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

Un objeto recogible es un disparador con su propio script. Cuando algo entra, el objeto recogible comprueba que sea el jugador, le transfiere 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 en el caso de una caja que 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 no necesita ninguna referencia del Inspector, y un nivel puede contener cincuenta paquetes. Heal es public porque otro script lo llama, y el límite de 100 está en Health, el único lugar que controla hp. Destroy(gameObject) elimina el paquete; Destroy(other.gameObject) eliminaría al jugador.

challenge icon

Desafío

Fácil

Haz que las cajas de munición recarguen el Blaster (ammo 4, maxAmmo 10).

  1. En Blaster.cs, añade public int AddAmmo(int amount): int taken = Mathf.Min(amount, maxAmmo - ammo);, súmalo a ammo, registra "Ammo: " + ammo y devuelve taken.
  2. En AmmoCrate.cs, cuando other.TryGetComponent(out Blaster blaster), llama a blaster.AddAmmo(amount); y a Destroy(gameObject);.

Pulsa «Jugar» y camina hacia la derecha: la consola muestra Ammo: 7 y después Ammo: 10. Luego, pulsa «Comprobar».

Pruébalo tú mismo

using UnityEngine;

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

    void OnTriggerEnter(Collider other)
    {
        // El Blaster del jugador recoge la munición y la caja desaparece
    }
}

Todas las lecciones de Física y jugabilidad

Practica por tu cuenta: Playground de Unity