原理
无缝地图切换有别于传统的流送地图,流送地图是在一个地图中放置子关卡,通过控制子关卡的加载和卸载来切换不同的地图
而无缝地图切换,是在切换地图的时候,先切换到一个简单的地图中,在后台加载地图,加载完成后再切换到那个地图中
设置
无缝地图的中间加载地图可以在项目设置的地图->高级->TransitionMap处配置,如果没有配置则会创建一个默认的空场景地图

同时,需要在GameMode中开启UseSeamlessTravel

需要注意的是PIE编辑器模式下可能会出现无法流送的问题,会有警告提示,这时候就需要根据警告开启PIE流送功能

代码实现
因为这个函数没有开放给蓝图使用,所有需要自己添加调用函数
UFUNCTION(BlueprintCallable, meta=(WorldContext="WorldContextObject", CallableWithoutWorldContext))
static void OpenMap(UObject* WorldContextObject, TSoftObjectPtr<UWorld> Map);
void UMyBlueprintFunctionLibrary::OpenMap(UObject* WorldContextObject, TSoftObjectPtr<UWorld> Map)
{if(const APlayerController* PlayerController = Cast<APlayerController>(UGameplayStatics::GetPlayerController(WorldContextObject, 0))){PlayerController->GetWorld()->SeamlessTravel(FPackageName::ObjectPathToPackageName(Map.ToString()), true); }
}
注意事项
在加载中间地图的时候,开始地图的所有actor会被卸载,但同时会保留HUD和PlayerController等函数,如果要做加载UI可以在HUD中完成
在加载中间地图时,中间地图的所有逻辑以及actor都不会被加载,但是WorldSubsystem的加载卸载会正常执行
这个方法目前没找到查询具体所需时间的方法
如果需要知道什么时候新地图加载成功,可以看调用函数的说明,有写需要重写哪些函数
