• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

【UE4】异步加载关卡LoadingScreen(蓝图和C++)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
  • 一般先跳转到一个临时的关卡,然后异步加载目标关卡,同时展示Loading界面
  • 对于含有流关卡的目标关卡,可以先载入子关卡
  • 无进度条

C++ 异步加载关卡

LoadPackageAsync

bool bIsLoaded;
	 
UPROPERTY()
	FString LoadPackagePath;

// 用于加载完成的回调
DECLARE_DYNAMIC_DELEGATE(FOnAsyncLoadFinished);

UFUNCTION(BlueprintCallable)
	void MyAsyncLoad(const FOnAsyncLoadFinished& OnAsyncLoadFinished);

UFUNCTION(BlueprintCallable)
	float GetLoadProgress();
//开始异步加载
void ALoadActor::MyAsyncLoad(const FOnAsyncLoadFinished& OnAsyncLoadFinished)
{
//不使用GetBaseFilename,编译 error C4458: LoadPackageAsync failed to begin to load a package···
	LoadPackagePath = FPaths::GetBaseFilename(LoadPackageSoftObjectPath.ToString(), false);

	bIsLoaded = false;

	UE_LOG(LogTemp, Warning, TEXT("String: %s"), *LoadPackagePath);
	LoadPackageAsync(
		LoadPackagePath,
		FLoadPackageAsyncDelegate::CreateLambda([=](const FName& PackageName, UPackage* LoadedPackage, EAsyncLoadingResult::Type Result) 
			{
				if (Result == EAsyncLoadingResult::Failed)
				{
					UE_LOG(LogTemp, Warning, TEXT("Load Failed"));
				}
				else if (Result == EAsyncLoadingResult::Succeeded)
				{
					bIsLoaded = true;
					UE_LOG(LogTemp, Warning, TEXT("Load Succeeded"));
					OnAsyncLoadFinished.ExecuteIfBound();
				}
			}), 0, PKG_ContainsMap);
}

//获取加载的进度 -1 —— 100
float ALoadActor::GetLoadProgress()
{
	float FloatPercentage = GetAsyncLoadPercentage(*LoadPackagePath);
	if (!bIsLoaded)
	{
		FString ResultStr = FString::Printf(TEXT("Percentage: %f"), FloatPercentage);
		GEngine->AddOnScreenDebugMessage(-1, 2.0f, FColor::Green, ResultStr);
		UE_LOG(LogTemp, Warning, TEXT("Percentage: %f"), FloatPercentage);
	}
	else {
		FloatPercentage = 100;
	}
	return FloatPercentage;	
}

效果

FStreamableManager

  • 获取依赖项
  • 将依赖项转为 FSoftObjectPath 存储到容器中
  • 使用 RequestAsyncLoad 加载
  • 使用 GetLoadCount 获取加载进度

参考部分代码

参考


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap