第4章 数据系统设计(Data Architecture)
数据系统设计旨在规范游戏中所有基础数据的结构、加载方式、开发期热重载与运行期使用机制,确保数据安全性、可维护性与一致性。该章节主要围绕 ScriptableObject 资产的组织管理、工具链支持与校验机制展开。
4.1 统一数据加载机制(ScriptableObject 管理器)
所有策划定义的数据(任务、设施、科技、剧情等)在构建期统一转化为 ScriptableObject,并打入 Resources/Configs/ 目录中。
在运行时,由 DataManager 加载并管理这些配置。
public class DataManager : MonoBehaviour {
public static DataManager Instance;
public Dictionary<string, QuestConfig> questMap;
public Dictionary<string, FacilityConfig> facilityMap;
public Dictionary<string, TechNodeConfig> techMap;
public Dictionary<string, NarrativeEvent> narrativeMap;
public void LoadAll() {
questMap = Resources.LoadAll<QuestConfig>("Configs/Quest/").ToDictionary(q => q.questId);
facilityMap = Resources.LoadAll<FacilityConfig>("Configs/Facility/").ToDictionary(f => f.facilityId);
techMap = Resources.LoadAll<TechNodeConfig>("Configs/TechTree/").ToDictionary(t => t.techId);
narrativeMap = Resources.LoadAll<NarrativeEvent>("Configs/Narrative/").ToDictionary(n => n.eventId);
}
}
所有系统仅通过 DataManager.GetX(id) 接口访问配置数据,避免重复加载与硬编码。
4.2 资源目录结构规范
所有配置数据统一存储于 Resources/Configs/ 目录下,按模块分类:
/Resources
/Configs
/Quest
/Facility
/TechTree
/Narrative
/ResidentTemplate
/Faction
命名规范建议:
文件名使用 ID 对应(如
FAC_SOLAR_01.asset)ID 命名规范见附录 A.2
4.3 数据热重载工具(开发期使用,Editor-only)
为提升策划数据迭代效率,推荐实现一套 Unity Editor 工具:
支持 CSV/Excel/JSON 导入
支持配置一键刷新 ScriptableObject
支持资源 ID 自动生成与关联校验
工具功能示例:
public class DataImportTool : EditorWindow {
[MenuItem("Tools/Data Importer")]
static void Open() { ... }
void ImportQuestData(string excelPath);
void RegenerateScriptableObjects();
}
所有 Editor 工具均应位于 Editor/ 目录,并在正式构建时排除。
4.4 数据校验与依赖引用检测机制
为保证数据完整性与引用一致性,推荐实现数据校验机制:
任务引用设施 ID 是否存在?
科技是否引用合法的解锁内容?
剧情是否引用合法任务 / 分支选项?
实现方式:
在导入/构建阶段遍历所有 ScriptableObject
对引用字段执行一致性校验
输出日志 / 中断构建 / 标红错误项
可视化校验工具建议:
[MenuItem("Tools/Data Validator")]
public static void ValidateAllConfigs() {
foreach (var quest in DataManager.Instance.questMap.Values) {
if (!facilityMap.ContainsKey(quest.unlockTargetId)) {
Debug.LogError($"Quest {quest.questId} references invalid facility {quest.unlockTargetId}");
}
}
}
15 七月 2025