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.
Défi
FacileLa 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). Sicurrentest supérieur ou égal àcost, elle soustraitcostdecurrentet renvoietrue; sinon, elle laissecurrentinchangé et renvoiefalse. - 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 afficheToo tireddans 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;
}
}
}
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
1Des composants, pas des hiérarchies
Des composants simplesUn script de base pour les ennemisDes composants abstraitsDes composants qui fonctionnent ensembleRécapitulatif : tourelle modulaire4Données sérialisées
Classes sérialisablesListes dans l’inspecteurÉnumérations dans l’inspecteurRécapitulatif : table de butin7Machines à états
Les états sous forme de classesUne machine à étatsTransitionsLes cerveaux des ennemisRécapitulatif : états d’une porte10Projet : Survivant de l’arène
Le hérosTypes d’ennemis2Interfaces dans Unity
IDamageableInterfaces et TryGetComponentGetComponentsRécapitulatif : touche d’interaction5ScriptableObjects
Assets de donnéesStatistiques des armesParamètres partagésLes vagues sous forme de donnéesRécapitulatif : base de données d’objets