# MonoScriptRuntime::TryGetAvailableScriptClasses **命名空间**: `XCEngine::Scripting` **类型**: `method` **头文件**: `XCEngine/Scripting/Mono/MonoScriptRuntime.h` ## 签名 ```cpp bool TryGetAvailableScriptClasses( std::vector& outClasses) const override; ``` ## 当前实现流程 1. 清空 `outClasses`。 2. 若运行时尚未初始化,直接返回 `false`。 3. 遍历 `m_classes` 缓存,把每个条目转换成 `ScriptClassDescriptor`。 4. 按 `assemblyName -> namespaceName -> className` 排序后返回。 ## 返回内容边界 - 只来自当前已发现的应用程序集脚本类缓存。 - 不包含抽象类。 - 不包含非 `MonoBehaviour` 子类。 - 不会在这里重新加载程序集或重新做类型扫描;发现动作发生在 `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` ## 相关文档 - [MonoScriptRuntime](MonoScriptRuntime.md) - [ScriptEngine::TryGetAvailableScriptClasses](../../ScriptEngine/TryGetAvailableScriptClasses.md)