Menu
CoddyTech

Objets à ramasser

Fait partie de la section Physique et gameplay du Journey Unity de Coddy. Leçon 17 sur 71.

Un objet à ramasser est un déclencheur doté de son propre script. Lorsqu’un objet entre, l’objet à ramasser vérifie qu’il s’agit du joueur, lui transmet son effet, puis se détruit. Le script du joueur conserve le résultat et fournit une méthode publique pour cela. Ce pack de santé soigne tout objet doté d’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, sur le joueur
public int hp = 50;

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

other.TryGetComponent(out Health health) vaut false pour une caisse qui glisse sur le pack. Seul un objet doté d’un script Health peut donc le ramasser, et un joueur en pleine santé laisse le pack pour plus tard. Le pack trouve le joueur grâce à other, aucun pack n’a donc besoin d’une référence dans l’Inspector, et un niveau peut en contenir cinquante. Heal est public parce qu’un autre script l’appelle, et la limite à 100 se trouve dans Health, le seul endroit qui gère hp. Destroy(gameObject) supprime le pack ; Destroy(other.gameObject) supprimerait le joueur.

challenge icon

Défi

Facile

Fais en sorte que les caisses de munitions rechargent le Blaster (ammo 4, maxAmmo 10).

  1. Dans Blaster.cs, ajoute public int AddAmmo(int amount) : int taken = Mathf.Min(amount, maxAmmo - ammo);, ajoute cette valeur à ammo, affiche "Ammo: " + ammo dans le journal et renvoie taken.
  2. Dans AmmoCrate.cs, lorsque other.TryGetComponent(out Blaster blaster) est vérifié, appelle blaster.AddAmmo(amount); et Destroy(gameObject);.

Appuie sur « Jouer » et avance vers la droite : la Console affiche Ammo: 7, puis Ammo: 10. Ensuite, appuie sur « Vérifier ».

Essayez vous-même

using UnityEngine;

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

    void OnTriggerEnter(Collider other)
    {
        // Le Blaster du joueur récupère les munitions, et la caisse disparaît
    }
}

Toutes les leçons de Physique et gameplay

Entraînez-vous par vous-même : Playground Unity