EngineSubsystem 初始化时序与内核主权锁定
sequenceDiagram
participant E as Unreal Engine
participant SUB as LiteRtLmSubsystem
participant PL as Plugin Wrapper
E->>SUB: 1. Initialize(Collection)
activate SUB
SUB->>PL: 2. 尝试绑定 DLL 导出符号
PL-->>SUB: 3. 返回动态链接句柄
SUB->>SUB: 4. 建立全局 ModelHandle 置空状态
deactivate SUB
Note over E, SUB: 子系统进入 Ready 状态 (单例锁定)
本地 AI 模型加载涉及物理层级的显存锁定。如果多个 Actor 重复加载模型,会导致显存瞬间溢出。
通过 EngineSubsystem,插件确保全引擎生命周期内只有一个 EngineHandle。无论有多少个 NPC,都共用同一个推理物理实例。
模型一旦在子系统中 LoadModel,即使在 OpenLevel 切换地图时,显存占位也不会丢失。这避免了地图切换时冗长的“AI 预热”时间。
业务层如何安全地获取子系统主权:
// 1. 在业务层安全获取单例句柄
ULiteRtLmSubsystem* Subsystem = GEngine->GetEngineSubsystem<ULiteRtLmSubsystem>();
// 2. 查询内核主权状态
if (Subsystem && Subsystem->IsModelLoaded()) {
// 物理引擎已锁定显存,可直接进行 Session 操作
void* MySession = Subsystem->GetOrCreateSession(this);
}