Skip to content

Game3D: Überblick und Lifecycle

Status: produktives Entwicklungsziel

Zweck und Verantwortlichkeiten

Game3D verbindet Godot-Presentation und Lifecycle mit Shared-Domain, Nakama und ENet. Fachliche Dungeon-/Loadout-Regeln gehören nicht in Nodes; Scenes orchestrieren Services und bilden Daten auf 3D-Nodes/UI ab.

Wichtige Dateipfade und Klassen

Pfad / Namespace Verantwortung / Lebensdauer
src/HolodeckArena.Game3D/project.godot Engine 4.6, MainScene, Autoloads, Input und Layer
Core/Bootstrap/AppBootstrap.cs / HolodeckArena3D.Core.Bootstrap.AppBootstrap Client-Autoload; erzeugt Services einmal pro Prozess und navigiert zum Main Menu
Core/Bootstrap/ServerBootstrap.cs Server-Autoload; öffnet ENet und registriert Hub bei --server-mode
Core/Bootstrap/BootstrapBase.cs Composition Root; hier neue Services registrieren, keine Gameplay-Abläufe hineinziehen
Core/DI/ServiceProvider.cs eigener DI-Container; vom Bootstrap erzeugt und entsorgt
Core/SceneLoading/SceneLoader.cs asynchroner Scene-Wechsel und Injection
Core/SceneLoading/SceneInjector.cs injiziert rekursiv alle IServiceConsumer
Core/GameFlow/GameFlowRoutes.cs aktive, stabile Szenenrouten
Features/Gameplay/Player/PlayerController.cs 3D-Player, Input, Bewegung, Facing, Interaction, Health und aktiver Prototyp-Combat
Core/Network/DungeonCombatNetworkSync.cs separater ENet-Pfad für serverautoritative Dungeon-Waffen-Sessions
Features/Balancing/BalancingSandboxScene.tscn Standalone-Szene für Combat-, Enemy-, Weapon- und Power-up-Tuning

Laufzeit-Ablauf

MainScene ist ein Bootstrap-Container. Nach einem Frame bauen App/Server ihre Services; nur der zur RuntimeOption passende Pfad wird aktiv. Client: RuntimeConfig → Nakama-Services → Main Menu → Auth/Hub-Discovery → ENet → Hub. Server: RuntimeConfig → HubServerScene → ENet → Registry-Heartbeat.

Szenencontroller, die InjectedNode oder IServiceConsumer implementieren, dürfen erst nach InjectServices auf Services zugreifen. Standalone-Tools wie Room Preview und Balancing-Sandbox tragen die Gruppe standalone_tool_scene, damit Bootstrap keine normale Navigation startet.

Konfiguration und Erweiterungspunkte

  • Service ergänzen: Interface/Implementierung anlegen, in BootstrapBase registrieren, über Constructor oder InjectServices beziehen.
  • Route ergänzen: Scene erstellen, Konstante in GameFlowRoutes, Methode in IGameFlowService/GameFlowService, Navigation über den Service.
  • Input ergänzen: project.godot und gegebenenfalls AppBootstrap.EnsureGameplayInputActions; siehe How-to.
  • Autoload nur für prozessglobale Engine-Integration. Feature-State bevorzugt als DI-Service oder Scene-Node halten.

Tests, Debugging, Performance und Fallstricke

DI/Domain möglichst mit xUnit testen; Scene-Lifecycle manuell oder in Godot. Häufigster Fehler ist ein nicht injizierter Node, ein Autoload-Zugriff in Standalone-Tools oder ein nicht abgemeldetes Event. _PhysicsProcess des Players ist Hot Path: keine Serviceauflösung, Loads oder LINQ pro Frame.

Verwandt: Architektur, Szenen/Autoloads, Social Hub, Troubleshooting.