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 64.

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 composant Fuel chaque fois qu’un Jetpack est ajouté, dans l’éditeur ou avec AddComponent, et empêche de supprimer ce composant 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 précédente. 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 alors disponibles.

Le Jetpack ne modifie jamais amount lui-même. Fuel décide de ce que signifie brûler du carburant, par exemple ne jamais descendre sous 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

Fais en sorte que le dash du patineur coûte de l’endurance.

  1. Dans Stamina, ajoute public bool TrySpend(float cost) : si current est supérieur ou égal à cost, déduis cette valeur et renvoie true, sinon false.
  2. Place [RequireComponent(typeof(Stamina))] au-dessus de public class Dash, puis récupère le composant dans un champ dans Awake().
  3. Quand tu appuies sur Espace, effectue un dash uniquement si TrySpend(cost) renvoie true ; sinon, affiche Too tired dans le journal.

Appuie sur « Jouer » : après deux dashs, la Console affiche Too tired. Ensuite, clique sur « Vérifier ».

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;
        }
    }
}

Toutes les leçons de Architecture de jeu dans Unity

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