Unity project with a modular architecture. Code is split into core application layers, gameplay features, and reusable modules in Assets/Modules.
- Application initialization is driven by an
ILoadingTaskpipeline defined inAssets/Game/App/Loading/LoadingPipeline.assetand executed byAssets/Game/App/Loading/Scripts/ApplicationLoader.cs. - Game initialization uses a separate
GameLaunchPipeline(seeAssets/Game/App/GameManagment/Scripts/LaunchGame/GameLauncher.cs), which decouples game start from app boot. - Services are registered via
ServiceInstallerand accessed throughServiceLocator, with attribute-based DI viaServiceInjector. This keeps subsystems loosely coupled and composable through service packs. - Game lifecycle is managed by
GameContext(construct/init/ready/play/pause/finish), with centralized registration of elements and services. - Persistent data is stored in SQLite (
SqliteModule); install/update tasks run during loading, and paths are configured inDatabaseConfig. - Content/configs rely on ScriptableObjects and Unity Addressables (see
Packages/manifest.jsonandAddressableAssetsData).
Assets/Game— gameplay features and application layers (App/Gameplay/Meta/UI/Scenes).Assets/Modules— reusable modules (AI, Services, GameSystem, UIFrames, Windows, Localization, Sqlite, etc.).Assets/Resources/Assets/StreamingAssets— resources accessible viaResourcesand platform-specific access.Packages/manifest.json— project dependencies (Addressables, URP, Purchasing, Cinemachine, etc.).
- Modular structure with
.asmdeffor code isolation and faster compilation. - ScriptableObject pipelines for flexible initialization order without code changes.
- Service Locator + attribute-based DI for low coupling between subsystems.
- SQLite as local storage with versioning and startup migration.
- Separate AI modules (BehaviourTree/GOAP/Blackboards/PathFinding) as autonomous subsystems.