Autobattler Unity
📌 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, etMouvement. - 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 lesspeedMultipliersou lesdamagesans 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
- Code Source : Voir le dépôt Github
🚀 Développé par Evanescent.