# ScriptEngine::TryGetScriptFieldModel **命名空间**: `XCEngine::Scripting` **类型**: `method` **头文件**: `XCEngine/Scripting/ScriptEngine.h` ## 签名 ```cpp 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 数据模型的一层。它让工具或调试界面能回答这些关键问题: - 这个字段类里声明了吗? - 当前显示的是类默认值、存储值还是托管值? - 本地存储是否已经和类定义不匹配? ## 相关文档 - [TryGetScriptFieldSnapshots](TryGetScriptFieldSnapshots.md) - [ScriptField](../ScriptField/ScriptField.md)