3.8 UI 系统架构(UISystem)
UI 系统负责承载所有玩家交互界面,包括资源面板、任务追踪、设施管理、居民面板、科研树、剧情播放等功能模块。UI 系统应采用模块化、解耦、事件驱动的架构设计,确保运行效率与界面可拓展性。
3.8.1 UI 管理器设计(UI 层级、模块生命周期)
建议采用统一 UIManager 控制所有 UI 模块的显示与状态。
public class UIManager : MonoBehaviour {
public Dictionary<string, BaseUIPanel> panelMap;
public void Open(string panelId);
public void Close(string panelId);
public bool IsOpen(string panelId);
}
支持 UI 层级划分:
HUD 层(顶部资源条、状态面板)
弹窗层(设施详情、居民信息)
全屏层(科技树、剧情面板、设置界面)
遮罩层(对话遮盖、警告提示)
UI 面板生命周期统一划分为:
OnInit()→ 注册事件、预加载资源OnOpen()→ 激活面板,绑定数据OnClose()→ 注销事件,清理状态
3.8.2 面板注册与模块绑定机制
每个 UI 模块建议继承基础类 BaseUIPanel 并以资源路径形式进行自动注册。
public abstract class BaseUIPanel : MonoBehaviour {
public abstract string PanelId { get; }
public abstract void OnInit();
public abstract void OnOpen();
public abstract void OnClose();
}
面板初始化阶段加载至 UIManager:
panelMap[panel.PanelId] = panel;
模块通信接口:
UI 调用系统:如
FacilitySystem.GetStatus(facilityId)系统回调 UI:使用事件系统广播状态变更,由 UI 响应更新
3.8.3 UI 与数据系统的解耦(事件/观察者机制)
UI 模块不直接轮询数据系统 ,而通过观察者/事件机制响应更新,避免性能浪费与逻辑耦合。
常用事件结构:
public class ResourceChangedEvent {
public ResourceType type;
public int newAmount;
}
public class FacilityStatusEvent {
public string facilityId;
public FacilityState newState;
}
注册示例:
EventBus.Subscribe<ResourceChangedEvent>((e) => {
if (e.type == ResourceType.Water) waterUI.SetValue(e.newAmount);
});
3.8.4 扩展建议
UI 热更新框架支持 :支持后期面板以 AB 包增量更新(用于 DLC)
响应式布局系统 :支持多分辨率适配与 Steam Deck / 宽屏支持
UI 模块权限标记系统 :不同阶段模块是否可用(如科技树未解锁)
UI 指令调度支持 :用于自动化测试 / 引导流程(如
UIManager.Execute("ShowQuestHint"))
14 七月 2025