Menu
CoddyTech

Des composants qui fonctionnent ensemble

Fait partie de la section Architecture de jeu dans Unity du Journey Unity de Coddy. Leçon 4 sur 50.

Les petits composants ont tout de même besoin les uns des autres. Un Jetpack a besoin de Fuel sur le même objet : il récupère donc Fuel une fois dans Awake, le conserve dans un champ et communique avec lui par l’intermédiaire de deux petites méthodes publiques :

public class Fuel : MonoBehaviour
{
    public float amount = 10f;

    public bool IsEmpty()
    {
        return amount <= 0f;
    }

    public void Burn(float units)
    {
        amount = Mathf.Max(amount - units, 0f);
    }
}
[RequireComponent(typeof(Fuel))]
public class Jetpack : MonoBehaviour
{
    public float lift = 4f;
    private Fuel fuel;

    void Awake()
    {
        fuel = GetComponent<Fuel>();
    }

    void Update()
    {
        if (Keyboard.current.spaceKey.isPressed && !fuel.IsEmpty())
        {
            fuel.Burn(Time.deltaTime);
            transform.position += Vector3.up * lift * Time.deltaTime;
        }
    }
}

[RequireComponent(typeof(Fuel))] fait en sorte que Unity ajoute un Fuel chaque fois qu’un Jetpack est ajouté, dans l’éditeur ou avec AddComponent, et empêche de supprimer ce Fuel tant que le Jetpack est présent. Unity ne vérifie cela qu’au moment où le Jetpack est ajouté ; un Jetpack déjà présent sur un objet avant que vous écriviez l’attribut conserve donc sa configuration existante. Awake est l’endroit où le récupérer : cette méthode s’exécute une fois, et tous les composants de l’objet sont présents à ce moment-là.

Le Jetpack ne modifie jamais amount lui-même. Fuel décide de ce que signifie brûler du carburant, par exemple de ne jamais descendre en dessous de 0, et le Jetpack se contente de le lui demander. Si Fuel affiche plus tard une jauge ou se recharge grâce à des objets ramassés, le Jetpack n’a pas besoin de changer.

challenge icon

Défi

Facile

La ruée de la patineuse est gratuite : la touche Espace la propulse de 3 unités vers l’avant (+z) aussi souvent que tu appuies dessus. Fais en sorte qu’elle coûte de l’endurance. Les flèches la font patiner (Mover.cs, prêt), et Stamina.cs recharge déjà current de regen par seconde, jusqu’à max (100).

  • Dans Stamina, ajoute une méthode publique bool TrySpend(float cost). Si current est supérieur ou égal à cost, elle soustrait cost de current et renvoie true ; sinon, elle laisse current inchangé et renvoie false.
  • Fais en sorte que Dash exige un Stamina sur son objet, afin que Unity en ajoute un chaque fois qu’un Dash est ajouté. Récupère-le une seule fois, dans Awake, et stocke-le dans un champ.
  • Une ruée coûte cost (l’Inspector définit la valeur à 40). La touche Espace ne déclenche une ruée que si TrySpend l’autorise ; sinon, elle affiche Too tired dans le journal.

Appuie sur Play et fais des ruées jusqu’à ce qu’elle soit trop fatiguée, puis clique sur Check.

Essayez vous-même

using UnityEngine;
using UnityEngine.InputSystem;

public class Dash : MonoBehaviour
{
    public float distance = 3f;
    public float cost = 40f;

    void Update()
    {
        if (Keyboard.current.spaceKey.wasPressedThisFrame)
        {
            transform.position += Vector3.forward * distance;
        }
    }
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Architecture de jeu dans Unity