Files
XCEngine/docs/api/XCEngine/Scripting/Mono/MonoScriptRuntime/TryGetAvailableScriptClasses.md

49 lines
1.6 KiB
Markdown
Raw Normal View History

2026-04-02 22:23:29 +08:00
# MonoScriptRuntime::TryGetAvailableScriptClasses
**命名空间**: `XCEngine::Scripting`
**类型**: `method`
**头文件**: `XCEngine/Scripting/Mono/MonoScriptRuntime.h`
## 签名
```cpp
bool TryGetAvailableScriptClasses(
std::vector<ScriptClassDescriptor>& outClasses) const override;
```
## 当前实现流程
1. 清空 `outClasses`
2. 若运行时尚未初始化,直接返回 `false`
3. 遍历 `m_classes` 缓存,把每个条目转换成 `ScriptClassDescriptor`
4.`assemblyName -> namespaceName -> className` 排序后返回。
## 返回内容边界
- 只来自当前已发现的应用程序集脚本类缓存。
- 不包含抽象类。
- 不包含非 `MonoBehaviour` 子类。
2026-04-03 15:48:09 +08:00
- 不会在这里重新加载程序集或重新做类型扫描;发现动作发生在 `Initialize()` 期间。
- 当前写入到 `descriptor.assemblyName` 的值来自 `m_settings.appAssemblyName`
## 为什么这个列表可以直接给 UI 用
当前实现已经在运行时层做了稳定排序,因此:
- `GetScriptClassNames()` 可以直接在此基础上再做一层字符串提取。
- `ScriptEngine::TryGetAvailableScriptClasses()` 也只需要再补一层程序集过滤和空类名剔除。
- Inspector 下拉框或脚本选择器不需要自己再去理解 Mono 反射细节。
## 真实行为依据
- `engine/src/Scripting/Mono/MonoScriptRuntime.cpp`
- `tests/scripting/test_mono_script_runtime.cpp`
- `tests/scripting/test_project_script_assembly.cpp`
2026-04-02 22:23:29 +08:00
## 相关文档
- [MonoScriptRuntime](MonoScriptRuntime.md)
- [ScriptEngine::TryGetAvailableScriptClasses](../../ScriptEngine/TryGetAvailableScriptClasses.md)