Objets à ramasser
Fait partie de la section Physique et gameplay du Journey Unity de Coddy. Leçon 17 sur 63.
Un objet à ramasser est un déclencheur doté de son propre script. Quand quelque chose entre en collision avec lui, l’objet vérifie qu’il s’agit du joueur, lui transmet son effet et se détruit. Le script du joueur conserve le résultat et propose une méthode publique pour cela. Ce kit de soins soigne tout objet qui possède 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) renvoie false pour une caisse qui glisse jusqu’au kit. Seul un objet doté d’un script Health peut donc le ramasser, et un joueur en pleine santé laisse le kit sur place pour plus tard. Le kit trouve le joueur grâce à other : aucun kit 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 de 100 se trouve dans Health, le seul endroit qui gère hp. Destroy(gameObject) supprime le kit ; Destroy(other.gameObject) supprimerait le joueur.
Défi
FacileLe joueur porte un Blaster : ammo (4 au départ) et maxAmmo (10). Les flèches le déplacent et la barre d’espace tire un projectile, et les deux sont affichés. Faites en sorte que les caisses de munitions le remplissent :
- Dans
Blaster.cs, ajoutez une méthode publiqueint AddAmmo(int amount). Elle prend autant deamountque possible sans dépassermaxAmmo, affiche le nouveau total, par exempleAmmo: 7, et renvoie la quantité prise. - Dans
AmmoCrate.cs, lorsque le joueur entre dans une caisse, proposez au Blaster la valeuramountde la caisse et soustrayez la quantité prise. Une caisse désormais vide est supprimée ; une caisse qui contient encore des munitions reste en place avec la quantité restante, pour une prochaine visite.
La première caisse contient 3 munitions et la seconde 5. Appuyez sur Jouer, avancez vers la droite, tirez quelques coups et retournez dans la seconde caisse, puis appuyez 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 prend ce qu'il peut contenir ; la caisse garde le reste et disparaît une fois vide
}
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Physique et gameplay
1Corps rigide
Gravité et massePousser avec AddForceSauter avec une impulsionFixedUpdate pour la physiqueVitesseCorps cinématiquesRécapitulatif : plateforme de lancement4Coroutines
InvoquerInvokeRepeating, CancelInvokeVotre première coroutineBoucles dans les coroutinesArrêter les coroutinesRécapitulatif : compte à rebours2Collisions
OnCollisionEnterQu’est-ce que j’ai touché ?Se briser à l’impactRester au solRebond et frictionFormes des collidersRécapitulatif : mur destructible5Projet : Course aux pièces
La balle roulanteDes pièces à ramasser