Menu
CoddyTech

Données ennemies

Leçon 2 sur 18 du cours Jeu Unity : défense de tours de Coddy.

Un jeu de tower defense comporte plusieurs types d’ennemis : des soldats, des coureurs rapides et des chars lents. Tous les soldats marchent à la même vitesse et commencent avec les mêmes points de vie ; ces valeurs appartiennent donc au type, et non à un ennemi particulier. Elles sont stockées dans un asset ScriptableObject, un par type, et chaque ennemi de ce type y fait référence. Modifiez l’asset, et tous les ennemis de ce type changeront avec lui.

Un asset ne doit pas contenir l’état d’un ennemi particulier. Un soldat qui a reçu un coup a moins de points de vie que celui qui le suit ; l’asset contient donc maxHealth, les points de vie avec lesquels un soldat commence, et chaque ennemi les copie dans son propre champ. Un jeu de course sépare une voiture de la même manière :

[CreateAssetMenu(fileName = "NewCar", menuName = "Racing/Car Data")]
public class CarData : ScriptableObject
{
    public float topSpeed = 30f;
    public float tankSize = 50f;
}

public class Car : MonoBehaviour
{
    public CarData data;
    private float fuel;

    void Awake()
    {
        fuel = data.tankSize;
    }
}

Toutes les voitures d’un modèle partagent un seul CarData, et chacune consomme son propre fuel. Écrire data.tankSize -= used à la place viderait le réservoir de toutes les voitures de ce modèle en même temps, et dans l’Editor, la modification resterait dans l’asset après Play. Awake s’exécute dès que l’objet est créé ; la copie est donc prête avant que quoi que ce soit puisse l’utiliser.

challenge icon

Défi

Facile

Un Runner rejoint le Grunt : il est plus rapide et a moins de points de vie. Crée un asset pour chaque type.

  1. Dans EnemyData.cs, rends EnemyData créable depuis le menu Create, avec le nom de menu Tower Defense/Enemy Data, et ajoute-lui les champs publics speed (un float), maxHealth et reward (des int).
  2. Dans Enemy.cs, remplace le champ speed par un champ public data de type EnemyData, et déplace-toi à data.speed.
  3. Ajoute un int privé health, dont la valeur est définie sur maxHealth de l’asset dans Awake.

Le projet contient un asset GruntData (vitesse 2, santé 9, récompense 5) et un asset RunnerData (vitesse 3.5, santé 5, récompense 3), et l’Inspector attribue un asset à chaque ennemi. Appuie sur Play et regarde le Runner dépasser le Grunt, puis clique sur Check.

Essayez vous-même

using UnityEngine;

// À venir : les caractéristiques d’un type d’ennemi, sous forme d’asset.
public class EnemyData : ScriptableObject
{
}
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 Jeu Unity : défense de tours