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.
Desafío
FácilEl 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úblicoint AddAmmo(int amount). Toma deamounttanto como quepa sin superarmaxAmmo, registra el nuevo total, comoAmmo: 7, y devuelve cuánto tomó. - En
AmmoCrate.cs, cuando el jugador entre en una caja, ofrece al Blaster elamountde 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
}
}
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
1Cuerpo rígido
Gravedad y masaEmpujar con AddForceSaltar con un impulsoFixedUpdate para físicaVelocidadCuerpos cinemáticosRepaso: plataforma de lanzamiento2Colisiones
OnCollisionEnter¿Qué golpeé?Romper al impactarDe pie sobre el sueloRebote y fricciónFormas de los collidersRepaso: muro destructible5Proyecto: Carrera de monedas
La bola rodanteMonedas para recoger