2026-04-02 22:23:29 +08:00
|
|
|
# ScriptEngine::TryGetAvailableScriptClasses
|
|
|
|
|
|
|
|
|
|
**命名空间**: `XCEngine::Scripting`
|
|
|
|
|
|
|
|
|
|
**类型**: `method`
|
|
|
|
|
|
|
|
|
|
**头文件**: `XCEngine/Scripting/ScriptEngine.h`
|
|
|
|
|
|
|
|
|
|
## 签名
|
|
|
|
|
|
|
|
|
|
```cpp
|
|
|
|
|
bool TryGetAvailableScriptClasses(
|
|
|
|
|
std::vector<ScriptClassDescriptor>& outClasses,
|
|
|
|
|
const std::string& assemblyName = std::string()) const;
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## 作用
|
|
|
|
|
|
|
|
|
|
返回当前运行时可绑定的脚本类列表,并可按程序集过滤。
|
|
|
|
|
|
|
|
|
|
## 当前实现流程
|
|
|
|
|
|
|
|
|
|
1. 清空 `outClasses`。
|
2026-04-08 16:07:03 +08:00
|
|
|
2. 调用当前运行时的 `TryGetAvailableScriptClasses(runtimeClasses)`。
|
|
|
|
|
3. 如果运行时返回 `false`,直接返回 `false`。
|
|
|
|
|
4. 若传入了 `assemblyName`,只保留匹配该程序集的条目。
|
|
|
|
|
5. 过滤掉 `className` 为空的无效描述。
|
|
|
|
|
6. 按 `assemblyName -> namespaceName -> className` 排序。
|
|
|
|
|
7. 返回 `true`。
|
|
|
|
|
|
|
|
|
|
## 关键语义
|
|
|
|
|
|
|
|
|
|
- 这个方法消费的是“运行时已经发现好的类列表”,不会在这里重新扫描程序集,也不会为结果做实例创建验证。
|
|
|
|
|
- 如果运行时能提供列表,但过滤后一个类都不剩,当前仍返回 `true`,只是 `outClasses` 为空。
|
|
|
|
|
- 这一步的排序是给 Inspector / 脚本类选择 UI 做稳定输出用的;调用方不需要再按自己的规则重排一遍。
|
|
|
|
|
- 当前 `MonoScriptRuntime` 本身也会返回排序后的列表,但 `ScriptEngine` 仍然会再做一层规范化,这样换后端时对上层 UI 的输出形态更稳定。
|
2026-04-02 22:23:29 +08:00
|
|
|
|
|
|
|
|
## 返回值语义
|
|
|
|
|
|
2026-04-08 16:07:03 +08:00
|
|
|
- 返回 `true`: 运行时支持类发现,排序 / 过滤后的结果可用。
|
|
|
|
|
- 返回 `false`: 运行时不支持,或当前不能返回类列表。
|
|
|
|
|
|
|
|
|
|
## 典型用途
|
|
|
|
|
|
|
|
|
|
- Inspector 中的脚本类下拉列表。
|
|
|
|
|
- 运行时或编辑器中的脚本类过滤器。
|
|
|
|
|
- 需要显示 `Namespace.Class` 稳定排序结果的调试面板。
|
|
|
|
|
|
|
|
|
|
## 真实行为依据
|
|
|
|
|
|
|
|
|
|
- `engine/src/Scripting/ScriptEngine.cpp`
|
|
|
|
|
- `tests/Scripting/test_script_engine.cpp`
|
2026-04-02 22:23:29 +08:00
|
|
|
|
|
|
|
|
## 相关文档
|
|
|
|
|
|
|
|
|
|
- [ScriptEngine](ScriptEngine.md)
|
|
|
|
|
- [IScriptRuntime::TryGetAvailableScriptClasses](../IScriptRuntime/TryGetAvailableScriptClasses.md)
|