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

35 lines
1.1 KiB
Markdown
Raw Normal View History

# MonoScriptRuntime::CreateScriptInstance
**命名空间**: `XCEngine::Scripting`
**类型**: `method`
**头文件**: `XCEngine/Scripting/Mono/MonoScriptRuntime.h`
## 签名
```cpp
bool CreateScriptInstance(
const ScriptRuntimeContext& context) override;
```
## 当前实现流程
1.`context.component` 为空,失败并记录错误。
2. 若该实例已存在,直接返回 `true`
3. 若运行时尚未初始化,先调用 [Initialize](Initialize.md)。
4. 根据组件的程序集名、命名空间和类名查找类元数据;程序集名为空时回退到 `Settings::appAssemblyName`
5. 在 app domain 中创建托管对象并执行默认构造。
6. 写入上下文字段:`gameObjectUUID``scriptComponentUUID`
7.`ScriptFieldStorage` 中能匹配上的字段写入托管对象。
8. 创建 `gcHandle` 并写入实例缓存。
## 失败路径
类不存在、分配失败、上下文字段写入失败、存储字段应用失败时都会返回 `false` 并更新 `m_lastError`
## 相关文档
- [DestroyScriptInstance](DestroyScriptInstance.md)
- [SyncManagedFieldsToStorage](SyncManagedFieldsToStorage.md)