1.9 KiB
1.9 KiB
ScriptEngine::TryGetScriptFieldModel
命名空间: XCEngine::Scripting
类型: method
头文件: XCEngine/Scripting/ScriptEngine.h
签名
bool TryGetScriptFieldModel(
const ScriptComponent* component,
ScriptFieldModel& outModel) const;
作用
构建一份融合类元数据、托管值和本地缓存值的完整字段模型。
当前实现逻辑
1. 判定类状态
- 没绑定脚本类:
Unassigned - 绑定了脚本类且后端能返回元数据:
Available - 绑定了脚本类但后端查不到:
Missing
2. 为已声明字段建立快照
对于运行时可见的每个字段:
- 先尝试用运行时
TryGetClassFieldDefaultValues()返回的类默认值;拿不到时才回退到按字段类型生成零值/空值。 - 如果本地存储里有同名字段,则记录
storedType / storedValue。 - 若类型不匹配,标记
TypeMismatch。 - 若托管实例可读该字段,则当前值来源记为
ManagedValue。 - 否则若本地存储类型匹配,则当前值来源记为
StoredValue。
3. 追加仅存储字段
如果本地缓存里有字段名,但类元数据里没有:
- 会以
StoredOnly问题状态附加到模型末尾。
4. 排序规则
- 当类状态不是
Available时,会按字段名整体排序。 - 类状态为
Available时,已声明字段按运行时元数据顺序构建,存储遗留字段再追加。
为什么这很重要
这套模型不是“为了文档好看”,而是当前脚本系统里最接近商业引擎 Inspector 数据模型的一层。它让工具或调试界面能回答这些关键问题:
- 这个字段类里声明了吗?
- 当前显示的是类默认值、存储值还是托管值?
- 本地存储是否已经和类定义不匹配?