运行时 API 使用
本章介绍 Fink Framework 数据管线中所有运行时可直接调用的数据 API,包括:
- 数据文件读取(默认数据 / 本地文件)
- 本地数据保存
- 数据加密与解密
- 自动映射数据路径(按类型自动定位文件)
- 类型解析(支持数组、List、Dictionary、嵌套泛型)
- AES 加密 / 解密工具
运行时 API 主要集中在以下两个类中:
- FilesUtil —— 负责组装路径、查找文件、读写 StreamingAssets / PersistentDataPath
- DataUtil —— 负责序列化、反序列化、AES 加密与解密
本章将逐一说明每个方法的作用、使用场景与示例。
其中用户只需重点关注 数据读取API与数据保存API 即可,其余通常不需要用户手动调用,均为框架内部使用。
1. 数据读取 API
1.1 读取默认数据(只读)
默认数据位于:
StreamingAssets/FinkFramework_Data/DataJsonStreamingAssets/FinkFramework_Data/DataBinary
特点:
- 只读,一般用于数值配置,无需存档的数据
- 随应用程序打包
- 若不传路径,会自动根据类型查找对应文件所在的路径(根据文件名匹配)
使用方法示例:
var cfg = FilesUtil.LoadDefaultData<T>(string relativePath = null);
其中relativePath可传空。
其中T为需要读取的强类型数据容器类。
若不传路径,会自动根据类型定位对应文件。例如:
PlayerSaveDataContainer→ 匹配StreamingAssets/FinkFramework_Data/DataBinary/PlayerSaveData.自定义后缀名
1.2 读取本地数据(可读可写)
本地数据位于:
PersistentDataPath/FinkFramework_Data/DataBinaryPersistentDataPath/FinkFramework_Data/DataJson
特点:
- 可读可写,一般用于用户存档、用户设置等数据
- 若本地文件不存在,会自动从 StreamingAssets 复制默认文件
- 支持 AES 解密
使用方法示例:
var save = FilesUtil.LoadLocalData<PlayerSaveData>();
其中relativePath可传空。
其中T为需要读取的强类型数据容器类。
若不传路径,会自动根据类型定位对应文件。
2. 数据保存 API
用于保存玩家设置、玩家存档等。
2.1 保存本地数据
特点:
- 自动创建文件夹
- 自动加密
- 自动根据类名定位路径
使用方法示例:
FilesUtil.SaveLocalData<T>(T data, string relativePath = null);
其中relativePath可传空。
其中data为需要存储的数据实例。
若不传路径,会自动根据类型定位对应文件。
3. AES 加密与解密
若全局设置中 数据源选择了 二进制模式,则默认进行AES加密。
可在全局设置中 自行选择是否开启加密。
框架内部在 DataUtil.Save / Load 中自动完成加密/解密,因此用户一般无需手动调用。
4. 路径相关处理API
框架内部在加载与保存数据时,会自动处理对应的路径逻辑。
这些 API 通常由框架内部使用,用户一般无需手动调用。
4.1 NormalizePath
将任意形式的路径标准化,保证在不同平台上表现一致。
功能:
- 统一路径分隔符为 /
- 去除多余空格与多余的斜杠
- 不会误删绝对路径前缀(例如 http://、C:/)
示例:
string p = FilesUtil.NormalizePath("Data\\Player\\Save");
4.2 BuildFullPath
用于拼接文件的完整路径,并根据当前数据源模式(JSON / Binary)自动补上扩展名。
注意:
- 不会决定使用 StreamingAssets 或 PersistentDataPath — 由调用者传入 basePath 决定
- 若 isAddExtension = true 会自动补齐正确的扩展名: JSON 模式 → .json, Binary 模式 → GlobalSettings.Current.EncryptedExtension
string full = FilesUtil.BuildFullPath(
Application.persistentDataPath,
"FinkFramework_Data/DataLocal/PlayerSaveData",
true
);
若当前模式为 JSON → 自动补 .json
若当前模式为 Binary → 自动补 .fink(或你自定义的扩展名)
4.3 EnsureDirectory
确保路径对应的文件夹已存在,否则自动创建。
FilesUtil.EnsureDirectory(path);
框架在保存本地数据、拷贝 StreamingAssets 默认文件时会自动调用。
5. 泛型类型映射
框架内部会自动动态解析类型,因此用户一般无需手动调用。
5.1 FindType
支持:
- int / float / bool / string 等基础类型
- Vector2 / Vector3 / Color / Matrix4x4 等Unity常用类型
- 数组类型(如
ItemData[]) - 常用泛型定义映射(如列表、字典、哈希表等)
- 反射查找同名类型
- 查找所有程序集中的类型
示例:
Type t = DataUtil.FindType("Dictionary<string, int>");
5.2 FindGenericType
支持查找多层嵌套类型等复杂结构:
Dictionary<string, List<ItemData>>
List<Dictionary<int, SkillData>>
示例:
var t = DataUtil.FindGenericType("Dictionary<string, List<SkillData>>");
6. 序列化与反序列化
框架内部会自动进行序列化和反序列化,因此用户一般无需手动调用。
框架底层使用 OdinSerializer,支持:
- Vector/Color 等 Unity 类型
- 自定义数据结构
- 数组与嵌套泛型
- 深度复制
6.1 序列化对象
DataUtil.Save(path, data);
6.2 反序列化对象
var obj = DataUtil.Load<PlayerData>(path);
通过 FilesUtil + DataUtil,你可以在游戏中轻松做到:
- 加载配置
- 保存玩家存档
- 加载默认模板数据
- 读取加密 JSON / 二进制
- 高度通用的类型解析(支持复杂 Excel 字段)
本章节为所有运行时层的数据交互提供了统一入口。