Menu
CoddyTech

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.

challenge icon

Défi

Difficile

L’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 classe TowerLevel que l’Inspector peut afficher, avec public float range, public float fireEvery, public int damage et public int cost (le prix pour atteindre ce niveau), et TowerData, un ScriptableObject avec une entrée de menu Create et un public 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 infoText affiche les deux, sous la forme Level 1, 0 gold, chaque fois qu’ils changent.
  • Lorsque le nombre de secondes défini par fireEvery pour 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 à range de la tour, comme le détecte Physics.OverlapSphere), la tour tire sur le creep le plus proche. Elle récupère un bolt depuis un ObjectPool<Bolt>, le place à la tour et appelle bolt.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 bounty en or : écoutez l’événement statique Creep.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 forme Tower 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;
}
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 Architecture de jeu dans Unity