虚幻c++ 方法 ULevelStreamingDynamic::FLoadLevelInstanceParams 并没有等到场景加载完毕才执行,而openLevel 确可以做到等到场景加载完毕再执行, 要实现 openLevel 同样的
时间: 2025-01-01 08:40:36 浏览: 10
在虚幻引擎(Unreal Engine)中,`ULevelStreamingDynamic::FLoadLevelInstanceParams` 是一个用于动态加载关卡的结构体,它包含了创建新游戏实例时的参数。当你通过 `OpenLevel` 或 `LoadLevelAsync` 这些函数加载关卡时,通常会在关卡加载完成之后执行后续操作,因为它们内部会有一个同步或异步的加载过程。
然而,如果你想要在关卡真正加载完毕后再执行某个操作,特别是当 `FLoadLevelInstanceParams` 的回调函数(比如 `OnLevelsLoaded` 或者自定义的事件处理函数)不是在加载完成后立即触发的,你可以采取以下步骤:
1. 使用 `ILevelChangeRequest` 接口:这个接口允许你在关卡加载过程中注册监听器。当加载完成时,会触发相应的通知。
```cpp
ILevelChangeRequest* Request = GetWorld()->GetMutableLevelChangeRequest();
Request->AddOnLevelChangedDelegate(YourCustomFunction);
```
然后在你的 `YourCustomFunction` 中,确保检查关卡是否已经完全加载,例如通过 `World->IsLevelReadyForGameplay`。
2. 异步等待:如果你需要的是纯异步等待,你可以创建一个任务(Task)并在其完成前阻塞。
```cpp
auto Task = LoadLevelAsync(...);
Task.WaitUntilComplete();
```
3. 检查错误状态:确保在调用这些函数后检查返回值或异常,以确认加载是否成功。
```cpp
if (Succeeded)
{
// 关卡加载完成,这里执行你的操作
}
else
{
// 处理加载失败的情况
}
```
阅读全文