38 lines
1.1 KiB
Markdown
38 lines
1.1 KiB
Markdown
|
|
# ScriptEngine::OnScriptComponentClassChanged
|
|||
|
|
|
|||
|
|
**命名空间**: `XCEngine::Scripting`
|
|||
|
|
|
|||
|
|
**类型**: `method`
|
|||
|
|
|
|||
|
|
**头文件**: `XCEngine/Scripting/ScriptEngine.h`
|
|||
|
|
|
|||
|
|
## 签名
|
|||
|
|
|
|||
|
|
```cpp
|
|||
|
|
void OnScriptComponentClassChanged(ScriptComponent* component);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 作用
|
|||
|
|
|
|||
|
|
处理脚本组件在运行时中的类绑定变化。
|
|||
|
|
|
|||
|
|
## 当前实现流程
|
|||
|
|
|
|||
|
|
1. 忽略空指针。
|
|||
|
|
2. 如果运行时未启动,直接返回。
|
|||
|
|
3. 若该组件当前已被跟踪,则先执行 `StopTrackingScript(..., false)`:
|
|||
|
|
- 如有实例,会触发 `OnDisable -> OnDestroy -> DestroyScriptInstance`
|
|||
|
|
- 然后从跟踪表移除
|
|||
|
|
4. 如果组件已经没有脚本类,流程结束。
|
|||
|
|
5. 否则按新类重新 `TrackScriptComponent()`。
|
|||
|
|
6. 若新状态满足 `ShouldScriptRun()`,立即 `EnsureScriptReady(..., true)`,从而创建新实例并触发 `Awake / OnEnable`。
|
|||
|
|
|
|||
|
|
## 使用场景
|
|||
|
|
|
|||
|
|
`ScriptComponent::SetScriptClass()` 在已绑定类发生变化时会调用这里;`ClearScriptClass()` 也会走同一条停机路径。
|
|||
|
|
|
|||
|
|
## 相关文档
|
|||
|
|
|
|||
|
|
- [OnScriptComponentEnabled](OnScriptComponentEnabled.md)
|
|||
|
|
- [ScriptComponent::SetScriptClass](../ScriptComponent/SetScriptClass.md)
|