35 lines
1.1 KiB
Markdown
35 lines
1.1 KiB
Markdown
|
|
# 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)
|