Le Jeu
AI.VI est un hybride FPS × Tower Defense au sein d'un univers western futuriste, développé par le studio indépendant Out of Time et sorti commercialement le 18 mars 2026 sur Steam (Windows / Mac). Le jeu reçoit 100 % d'avis positifs à son lancement.
La boucle de jeu alterne des phases de Tower Defense (placement stratégique de pièges entre les vagues) et des phases d'action FPS, avec un système de combos élémentaires (inspiré de Genshin Impact) et une dimension roguelite : chaque montée de niveau offre des bonus aléatoires garantissant la rejouabilité.
Ma Mission — Développeur Réseau UE5
Le studio avait identifié un levier commercial critique : passer d'une expérience purement solo à un mode coopératif en ligne à 2 joueurs pour relancer la visibilité du titre sur Steam. Ma mission : opérer cette refonte architecturale complète, estimée à 4 mois par le studio — atteinte à 80 % avant la fin du 2ème mois.
Phase 1 — Audit Technique & Optimisation
- Profilage GPU/CPU avec les outils UE5 (
stat GPU, Shader Complexity, Visibility Collision) pour identifier précisément les goulots d'étranglement. - Optimisation des collisions : suppression des masques complexes superflus sur les éléments hors champ, passage à des géométries simplifiées.
- Optimisation du rendu : passage aux Instanced Static Meshes (réduction des draw calls), désactivation des canaux alpha superflus, configuration de Virtual Textures pour décharger la VRAM.
- Refactoring de l'architecture logicielle : suppression de la logique tick-based sur les UI (property bindings), migration vers une architecture Event-Driven. Nettoyage de plusieurs gigaoctets, compression Oodle.
Phase 2 — Refonte de l'Architecture Réseau
- Démantèlement de la structure monolithique : le projet d'origine centralisait toute la logique dans le GameMode et la GameInstance — incompatible avec le réseau. Redistribution vers GameState, PlayerController et PlayerState.
- GameState répliqué : supervision du cycle de vie des vagues, minuteurs, état de préparation des joueurs, fins de partie, réactions élémentaires — avec événements Multicast vers tous les clients.
- PlayerController & PlayerState : isolation des données par joueur (XP, ressources, bonus roguelite, état de validation), gestion des déconnexions et reconnexions en cours de partie.
- Réplication des variables : arbitrage rigoureux Reliable/Unreliable (UDP) selon la criticité des données. RepNotify pour découpler la logique serveur des représentations visuelles locales.
- Pipeline RPC : securisation des actions via Run on Server → validation serveur → Multicast (Niagara, SFX) → Run on Owning Client (feedback UI). Empêche toute modification directe de l'état du monde côté client.
Phase 3 — Intégration Online Subsystem Steam
- Déploiement et configuration des plugins Advanced Sessions & AdvancedSteamSessions + SteamSockets pour remplacer la connectivité réseau locale.
- Développement en C++ de nœuds Blueprint spécifiques pour l'interfaçage Steam.
- UI de gestion des sessions : hébergement de lobbies publics sur les serveurs Steam, recherche et rejoindre de sessions.
- Invitations directes via l'overlay Steam natif et rejoindre automatique via mécanisme de Rich Presence.
Phase 4 — Outils C++ & Contribution Communautaire
- Développement d'une suite d'outils C++ intégrés à l'éditeur UE5, publiés sur FAB (Epic Games Marketplace) et en open-source sur GitHub.
- Design web : conception de la maquette du nouveau site du studio sur Figma.
Plugins UE5 Publiés sur FAB
Outils C++ développés durant le stage, packagés pour UE5.4+ et distribués à la communauté sur la marketplace Epic Games.
🌐 Network Mode Blueprints
Expose le mode réseau actif (Standalone, Listen Server, Client, Dedicated Server) sous forme de nœuds Blueprint. Indispensable pour conditionner des fonctions selon le type de connexion lors du développement multijoueur.
⚙️ Blueprint Project Settings
Permet de récupérer la version officielle du projet directement en Blueprint. Utilisé comme filtre de connexion Steam : si les versions divergent entre deux builds, l'accès à la session est bloqué pour éviter les incohérences.
🎨 Shared Folder Color
Sérialise les préférences de coloration des dossiers UE dans un fichier .json partagé via Git. Garantit que toute l'équipe dispose automatiquement de la même charte visuelle de l'arborescence après synchronisation.
🔄 Restart Editor
Ajoute un bouton macro dans la toolbar UE5 pour sauvegarder, fermer et relancer proprement l'éditeur en un clic. Indispensable lors des workflows C++ et de configurations réseau fréquentes.