De petits composants
Fait partie de la section Architecture de jeu dans Unity du Journey Unity de Coddy. Leçon 1 sur 64.
Un GameObject est une liste de composants, et chaque script que tu écris en est un de plus. Les jeux Unity sont construits en attribuant une tâche à chaque script et en plaçant plusieurs scripts sur un objet. Le déplacement, le tir et les points de vie d’un joueur pourraient tous se trouver dans un seul PlayerController, mais en tant que trois composants, Mover, Shooter et Health, chacun peut aussi être placé sur d’autres objets :
public class Health : MonoBehaviour
{
public int hp = 3;
public void TakeDamage(int amount)
{
hp -= amount;
if (hp <= 0)
{
Destroy(gameObject);
}
}
}- Joueur : Mover, Shooter, Health
- Étourelle : Shooter, Health
- Caisse : Health
Avec de simples classes C#, tu pourrais plutôt construire un arbre : Character, puis ShootingCharacter : Character, puis Player : ShootingCharacter. Une tourelle tire, mais ne marche jamais, et une caisse ne fait que se casser ; chaque nouveau type d’objet implique donc de remanier l’arbre. Avec des composants, un nouveau type d’objet est une nouvelle combinaison de scripts existants, assemblés dans l’Inspector, et chaque script peut y avoir ses propres valeurs : un Mover lent sur un objet, un rapide sur un autre.
Les composants d’un même objet partagent son Transform, donc chacun ne devrait modifier que la partie dont il est responsable. Un Mover qui ajoute une valeur à x et z avec transform.position += laisse y inchangé, ce qui permet à un Jumper sur le même objet de modifier encore la hauteur. Un Mover qui définissait toute la position avec new Vector3(x, 0.5f, z) remettrait y à sa valeur précédente à chaque image et annulerait le saut.
Défi
FacileDivise Boat.cs pour que chaque script n’ait qu’un seul rôle.
- Déplace le mouvement de va-et-vient dans
Bobber:startYdéfini dansStart(), le mouvement de va-et-vient dansUpdate(), en utilisant ses propresheightetspeed. - Déplace le clignotement dans
Blinker, avec son propre minuteur. - Supprime ces deux rôles et leurs champs de
Boat, pour qu’il ne fasse que diriger le bateau.
Appuie sur « Jouer » : le canard monte et descend, la bouée clignote et le bateau se dirige. Puis appuie sur « Vérifier ».
Essayez vous-même
using UnityEngine;
using UnityEngine.InputSystem;
// Un seul script, trois tâches : diriger, osciller et clignoter.
public class Boat : MonoBehaviour
{
public float speed = 3f;
public float bobHeight = 0.1f;
public float bobSpeed = 2f;
public Renderer lamp;
public float blinkInterval = 0.5f;
private InputAction moveAction;
private float startY;
private float blinkTimer;
void Start()
{
moveAction = InputSystem.actions.FindAction("Move");
startY = transform.position.y;
}
void Update()
{
// direction
Vector2 input = moveAction.ReadValue<Vector2>();
transform.position += new Vector3(input.x, 0f, input.y) * speed * Time.deltaTime;
// oscillation
Vector3 p = transform.position;
p.y = startY + Mathf.Sin(Time.time * bobSpeed) * bobHeight;
transform.position = p;
// clignotement
blinkTimer += Time.deltaTime;
if (blinkTimer >= blinkInterval)
{
blinkTimer -= blinkInterval;
lamp.enabled = !lamp.enabled;
}
}
}
Toutes les leçons de Architecture de jeu dans Unity
1Des composants, pas des hiérarchies
De petits composantsUn script de base pour les ennemisComposants abstraitsDes composants qui fonctionnent ensembleRécapitulatif : tourelle modulaireRécapitulatif : canon double4Données sérialisées
Classes sérialisablesListes dans l’InspecteurÉnumérations dans l’InspecteurRécapitulatif : table de butinRécapitulatif : tirer le butin2Les interfaces dans Unity
IDamageableInterfaces et TryGetComponentGetComponentsRécapitulatif : touche d’interactionLe plus proche à portée5ScriptableObjects
Ressources de donnéesStatistiques des armesParamètres partagésSauver le ventLes vagues comme donnéesRécapitulatif : base de données des objetsRécapitulatif : acheter dans la boutique3Événements
Les événements C# dans UnityS’abonner dans OnEnableChamps UnityEventLes événements pilotent l’interfaceRécapitulatif : fenêtre de succèsRécapitulatif : minuteur de la fenêtreEntraînez-vous par vous-même : Playground Unity