April 5, 2025

Autobattler Unity

Vignette des arches Astro.

📌 Présentation

Ce projet est un Auto-Battler 3D développé sous Unity, inspiré par des titres comme Totally Accurate Battle Simulator (TABS). L’objectif principal était de concevoir une architecture robuste permettant de gérer des entités aux caractéristiques variées, un système d’équipement (items) et une boucle de combat autonome.

  • Rôle : Développeur Gameplay & Architecte Logiciel
  • Technologies : Unity 3D, C#, Programmation Orientée Objet (POO)
  • Contexte : Cours d’Architecture de Jeu Vidéo

🏗️ Architecture Technique

Le cœur du projet repose sur une structure modulaire favorisant le découplage entre les données et les comportements.

Système d’Entités et Attributs

J’ai mis en place une hiérarchie de classes permettant une extension facile de nouvelles unités ou objets :

  • Entity & Champion : Utilisation de la composition plutôt que de l’héritage massif pour définir les unités. Un Champion possède des modules Health, Attack, et Mouvement.
  • Système d’Attributs : Chaque statistique (Vitesse, Dégâts, Vie) hérite d’une classe abstraite Attribute, facilitant l’implémentation du système d’amélioration (Upgrades).

Diagramme de Structure (Extrait)

Note : Voici comment les composants interagissent pour modifier les statistiques en temps réel :

  • Item System : Les objets appliquent des multiplicateurs via runUpgrades, modifiant dynamiquement les speedMultipliers ou les damage sans altérer les valeurs de base de l’unité.
  • Gestion des États : Transition fluide entre le “Mode Placement” et le “Mode Bataille”.

🎮 Fonctionnalités Clés

  • Système d’Équipement Dynamique : Interface de drag-and-drop pour équiper des items (ex: Gantelets de force, Épée de foudre) avec mise à jour immédiate des statistiques.
  • IA de Combat : Algorithmes de recherche de cible et gestion des cooldowns d’attaque (entre 0.2s et 1.5s).
  • Équilibrage : Système de coût en pièces pour limiter la puissance de l’armée du joueur.

📈 Défis et Solutions

  • Défi : Gérer l’accumulation des bonus d’objets de manière propre.
  • Solution : Implémentation d’une liste de multiplicateurs (List<float>) dans le module de mouvement, permettant de recalculer la vitesse finale de manière prévisible plutôt que de modifier directement la variable de base, évitant ainsi les erreurs de calcul cumulatives.

🔗 Liens & Ressources

🚀 Développé par Evanescent.

Prêt·e à faire passer votre idée au niveau supérieur ? Travaillons ensemble.