Menu
CoddyTech

Oggetti da raccogliere

Fa parte della sezione Fisica e gameplay del percorso Unity di Coddy. Lezione 17 di 71.

Un oggetto da raccogliere è un trigger con uno script proprio. Quando qualcosa vi entra, l'oggetto verifica che si tratti del giocatore, gli trasferisce il suo effetto e si distrugge. Lo script del giocatore conserva il risultato e mette a disposizione un metodo pubblico per applicarlo. Questo kit medico cura qualunque oggetto abbia uno 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, sul giocatore
public int hp = 50;

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

other.TryGetComponent(out Health health) restituisce false per una cassa che scivola verso il kit, quindi può raccoglierlo solo un oggetto con uno script Health, mentre un giocatore con la salute al massimo lascia il kit lì per dopo. Il kit trova il giocatore tramite other, quindi non serve assegnare alcun riferimento nell'Inspector e un livello può contenerne cinquanta. Heal è public perché viene chiamato da un altro script, e il limite a 100 si trova in Health, l'unico punto che gestisce hp. Destroy(gameObject) rimuove il kit; Destroy(other.gameObject) rimuoverebbe il giocatore.

challenge icon

Sfida

Facile

Fai in modo che le casse di munizioni ricarichino il Blaster (ammo 4, maxAmmo 10).

  1. In Blaster.cs, aggiungi public int AddAmmo(int amount): int taken = Mathf.Min(amount, maxAmmo - ammo);, aggiungi il valore a ammo, registra "Ammo: " + ammo e restituisci taken.
  2. In AmmoCrate.cs, quando other.TryGetComponent(out Blaster blaster), chiama blaster.AddAmmo(amount); e Destroy(gameObject);.

Premi «Gioca» e cammina verso destra: nella Console vengono visualizzati Ammo: 7, poi Ammo: 10. Poi premi «Verifica».

Provalo tu

using UnityEngine;

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

    void OnTriggerEnter(Collider other)
    {
        // Il Blaster del giocatore raccoglie le munizioni e la cassa scompare
    }
}

Tutte le lezioni di Fisica e gameplay

Esercitati da solo: Playground Unity