Des composants simples
Fait partie de la section Architecture de jeu dans Unity du Journey Unity de Coddy. Leçon 1 sur 50.
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, puis en plaçant plusieurs scripts sur un objet. Le déplacement, les tirs et les points de vie d’un joueur pourraient tous être regroupés dans un seul PlayerController, mais sous forme de 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 des classes C# ordinaires, tu pourrais plutôt construire un arbre : Character, puis ShootingCharacter : Character, puis Player : ShootingCharacter. Une tourelle tire, mais ne marche jamais, et une caisse se brise simplement ; 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 ; chacun ne devrait donc modifier que la partie dont il est responsable. Un Mover qui ajoute des valeurs à x et z avec transform.position += laisse y inchangé, de sorte qu’un Jumper sur le même objet peut toujours modifier la hauteur. Un Mover qui définissait la position entière avec new Vector3(x, 0.5f, z) remettrait y à sa valeur à chaque image et annulerait le saut.
Défi
FacileBoat.cs fait trois choses à la fois : les flèches (l’action Move) dirigent le bateau, le bateau se balance sur les vagues et sa lampe clignote. Le canard a lui aussi besoin du balancement, et la bouée a besoin du balancement et du clignotement. La scène leur fournit donc déjà les composants Bobber et Blinker, tandis que le bateau possède les trois. Sépare-les dans Boat.cs :
- Bobber : chaque objet se balance autour de la hauteur à laquelle il se trouve au départ, de
heightunités vers le haut et vers le bas, à sa proprespeed(l’Inspector définit les deux). Bobber ne modifie que la valeur y de la position, afin que le bateau puisse toujours être dirigé. - Blinker : il allume et éteint
lamp(un Renderer) toutes lesintervalsecondes. - Boat conserve uniquement la direction : supprime le balancement et le clignotement, ainsi que leurs champs.
Appuie sur Play et dirige le bateau, puis clique sur Check.
Essayez vous-même
using UnityEngine;
using UnityEngine.InputSystem;
// Un script, trois fonctions : 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;
}
}
}
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