S2 - 2023 ~6 mois

Hell In The Maze

Un FPS coopératif multijoueur développé sous Unity : quatre joueurs s'écrasent sur une planète inconnue et doivent défendre le cœur survivant de leur vaisseau contre des vagues de monstres, tout en explorant un labyrinthe généré procéduralement pour récupérer les pièces manquantes du vaisseau.

Unity C# Mirror Procédural NavMesh

Le projet en quelques mots

Le jeu a été réalisé en équipe de quatre lors du projet informatique de semestre 2 (Sup) à l'EPITA. Il mélange trois genres : le FPS coopératif, le tower defense (tourelles et pièges autour du cœur du vaisseau) et l'exploration procédurale. Il se joue en multijoueur grâce à Mirror, la bibliothèque réseau d'Unity - une introduction fondamentale au travail collaboratif, à Git sur des fichiers binaires (assets Unity), et à la programmation orientée objet en C#.

Architecture & Algorithmes

Le cœur du jeu repose sur son générateur de labyrinthe. Il implémente un algorithme de type recursive backtracker pour produire des labyrinthes parfaits (sans boucles et entièrement connectés), généré une seule fois par le premier joueur connecté puis synchronisé auprès de tous les clients.

01

Grille de cellules

Le labyrinthe commence comme une grille de cellules non connectées, chacune avec tous ses murs.

02

Génération (recursive backtracker)

Parcours de la grille qui « casse » les murs, créant un chemin unique et connexe, côté hôte.

03

Synchronisation réseau

Le labyrinthe généré est diffusé à tous les clients via Mirror (NetworkBehaviour).

04

Instanciation 3D

Des prefabs de murs et de sols sont instanciés pour construire l'environnement.

05

Population & NavMesh

Le niveau est peuplé d'ennemis, puis un NavMesh est baké au runtime pour leur navigation.

Ce qui est présent dans le rendu

IA des ennemis

Un NavMeshAgent Unity gère trois comportements : patrouille aléatoire, poursuite du joueur détecté, et attaque (poing, épée ou saut selon l'ennemi). Trois catégories : un mutant, un ours, et un groupe de petits monstres autonomes surnommé « L'Horreur ».

Multijoueur (Mirror)

Une douzaine de scripts (labyrinthe, joueur, armes, inventaire, IA...) héritent de NetworkBehaviour pour synchroniser la partie entre l'hôte et les clients.

Tower defense

Des tourelles et des pièges peuvent être placés autour du cœur du vaisseau pour le défendre contre les vagues de monstres.

Craft, inventaire & sauvegarde

Un système de craft et d'inventaire permet d'exploiter les ressources récoltées ; une sauvegarde de partie est également implémentée.

Cycle jour/nuit

Un cycle jour/nuit anime le ciel du labyrinthe (ma contribution, avec la gestion de la skybox).

Génération procédurale

Chaque partie régénère un labyrinthe différent, transformé en environnement 3D jouable à partir de la grille calculée.

Mon rôle dans l'équipe

Mes contributions

Le projet a été mené à quatre. Ma contribution documentée dans le rapport porte sur l'IA des ennemis, le cycle jour/nuit (skybox) et la création du monstre « L'Horreur ».

Le comportement des ennemis repose sur une logique de patrouille/poursuite/attaque impérative plutôt que sur une machine à états formelle.

Synthèse du projet

Travail réalisé

Jeu coopératif jouable à quatre : personnage, tir, mort/respawn, inventaire, craft, labyrinthe régénéré à chaque partie et synchronisé via Mirror, tower defense autour du cœur du vaisseau, cycle jour/nuit et sauvegarde.

Ce que le projet m'a apporté

Une première expérience significative de gestion de projet en groupe de quatre, la maîtrise des bases d'Unity et de C#, et une première mise en pratique d'un projet réseau multijoueur.