Défense de tour simplifiée
Fait partie de la section Architecture de jeu dans Unity du Journey Unity de Coddy. Leçon 48 sur 50.
Les creeps avancent sur la route vers votre base, et une seule tour la défend. La tour tire des carreaux sur le creep le plus proche tant qu’il est à portée, et chaque creep qu’elle élimine rapporte de l’or. La barre d’espace dépense l’or pour acheter le niveau suivant de la tour : chaque niveau augmente sa portée, sa cadence de tir ou ses dégâts. Un creep qui atteint la base passe. Les niveaux sont des données de jeu qu’un concepteur ajuste dans un asset, sans toucher au code, et la tour tire beaucoup de carreaux ; elle les réutilise donc depuis un pool au lieu d’en créer et d’en détruire un à chaque tir.
Écrivez deux scripts : TowerData, le type d’asset, et Tower. Creep, Bolt et CreepSpawner sont prêts.
Défi
DifficileL’Inspector fournit à Tower data (l’asset Arrow), boltPrefab et infoText. Lisez la barre d’espace avec Keyboard.current du système Input System.
- Dans
TowerData.cs: une classeTowerLevelque l’Inspector peut afficher, avecpublic float range,public float fireEvery,public int damageetpublic int cost(le prix pour atteindre ce niveau), etTowerData, un ScriptableObject avec une entrée de menu Create et unpublic List<TowerLevel> levels. L’asset Arrow contient trois niveaux : portée 4, intervalle de 1 s, dégâts 1, coût 0 ; portée 5, intervalle de 0,6 s, dégâts 1, coût 6 ; portée 6, intervalle de 0,4 s, dégâts 2, coût 12. - La tour commence au premier niveau avec 0 or, et
infoTextaffiche les deux, sous la formeLevel 1, 0 gold, chaque fois qu’ils changent. - Lorsque le nombre de secondes défini par
fireEverypour le niveau s’est écoulé depuis le dernier tir et qu’un creep est à portée (le collider d’un creep se trouve à une distance inférieure ou égale àrangede la tour, comme le détectePhysics.OverlapSphere), la tour tire sur le creep le plus proche. Elle récupère un bolt depuis unObjectPool<Bolt>, le place à la tour et appellebolt.Launch(creep, damage, pool.Release): le bolt appelle ce dernier argument lorsqu’il a terminé, ce qui le rend au pool. Un bolt est désactivé pendant qu’il attend dans le pool et activé lorsqu’il en est extrait. - Chaque creep qui meurt rapporte son
bountyen or : écoutez l’événement statiqueCreep.Killed. - La barre d’espace achète le niveau suivant, s’il y en a un et si l’or couvre son
cost: le coût est déduit de l’or, et la tour passe au niveau supérieur et l’indique dans le journal, sous la formeTower level 2. Sinon, la barre d’espace ne fait rien.
Appuyez sur Play, maintenez la route et améliorez la tour, puis cliquez sur Check.
Essayez vous-même
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.Pool;
using TMPro;
public class Tower : MonoBehaviour
{
[SerializeField] private TowerData data;
[SerializeField] private Bolt boltPrefab;
[SerializeField] private TMP_Text infoText;
private int level;
private int gold;
}
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