Project AS Developer Doc Help

3.1 GameManager 总控系统

GameManager 是整个游戏生命周期的主控模块,负责各系统的初始化、更新调度、状态切换、存档退出等顶层操作控制。同时,它也是各子系统间通信、时间推进的枢纽核心。

3.1.1 生命周期管理(Init → Update → Save → Quit)

GameManager 负责游戏启动至退出全流程的生命周期调度,包含以下阶段:

阶段

描述

Init

加载所有 ScriptableObject 数据,注册子系统,初始化全局状态与界面

StartGame

创建或加载存档,构建初始游戏状态(时间、资源、设施、居民)

Update

驱动 Tick 时间推进与模块级逻辑更新

Pause / Resume

控制是否暂停更新循环(如菜单打开时)

Save

调用 SaveSystem 序列化当前状态为存档文件

Quit

释放资源,执行清理逻辑,返回主菜单或退出游戏

GameManager 应支持以下典型 API 接口:

void Init(); void StartNewGame(); void LoadSaveData(GameSave save); void TickUpdate(float deltaTime); void SaveGame(); void ExitGame();

3.1.2 子系统注册/反注册机制

所有核心子系统(如 ResourceSystem、FacilitySystem、ResidentSystem 等)均应由 GameManager 统一注册并控制其生命周期。

推荐采用模块注册表机制(Module Registry)

Dictionary<string, IGameModule> _modules;
  • 各子系统实现 IGameModule 接口:

public interface IGameModule { void Init(); void TickUpdate(float deltaTime); void Shutdown(); }
  • 注册方式:

RegisterModule("ResourceSystem", new ResourceSystem());
  • 调用更新:

foreach (var m in _modules.Values) m.TickUpdate(Time.deltaTime);
  • 在运行期可热插拔新模块,用于 DLC / Debug 模块挂载。

3.1.3 时间推进机制(Tick / 天数 / 周期)

本游戏采用“日历推进 + Tick 模拟”的混合时间机制:

类型

单位

控制频率

用途

Tick

每帧 or 每固定秒数

每帧 / 0.1s

资源更新、行为更新

Day

每天

每 n Tick → 1 Day

每日例行结算、设施产出

Cycle

每 7~30 天

每 n Day → 1 Cycle

派系状态、任务刷新、事件触发

实现方式建议:

float tickTimer; float tickInterval = 0.2f; int currentDay = 0; int ticksPerDay = 50; void TickUpdate(float deltaTime) { tickTimer += deltaTime; while (tickTimer >= tickInterval) { tickTimer -= tickInterval; Tick(); tickCount++; if (tickCount % ticksPerDay == 0) OnNewDay(); if (currentDay % 30 == 0) OnCycle(); } }

系统内各模块如 FacilitySystem.Tick(), ResidentSystem.Tick() 将挂接至 GameManager 的 Tick 驱动中。

14 七月 2025