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

1.6 KiB

MonoScriptRuntime::TryGetAvailableScriptClasses

命名空间: XCEngine::Scripting

类型: method

头文件: XCEngine/Scripting/Mono/MonoScriptRuntime.h

签名

bool TryGetAvailableScriptClasses(
    std::vector<ScriptClassDescriptor>& 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

相关文档