87 lines
2.1 KiB
C++
87 lines
2.1 KiB
C++
// Fill out your copyright notice in the Description page of Project Settings.
|
|
|
|
|
|
#include "AsyncLoadingFunctionLibrary.h"
|
|
|
|
#include "Components/TimelineComponent.h"
|
|
#include "Engine/AssetManager.h"
|
|
#include "Engine/StreamableManager.h"
|
|
|
|
|
|
|
|
void UAsyncLoadingFunctionLibrary::TenGenAsyncLoad(TSoftObjectPtr<> PageageLoad,FString& LoadPackagePath,
|
|
const FOnAsyncLoadFinished& OnAsyncLoadFinished)
|
|
{
|
|
LoadPackagePath = FPaths::GetBaseFilename(PageageLoad.ToString(), false);
|
|
|
|
//打印loadpackagepath
|
|
// GEngine->AddOnScreenDebugMessage(-1, 20.0f, FColor::Green, LoadPackagePath);
|
|
//shu
|
|
|
|
|
|
|
|
|
|
// 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)
|
|
{
|
|
UE_LOG(LogTemp, Warning, TEXT("Load Succeeded"));
|
|
OnAsyncLoadFinished.ExecuteIfBound(LoadPackagePath);
|
|
}
|
|
}), 0, PKG_ContainsMap);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void UAsyncLoadingFunctionLibrary::AsyncLoadWithStreamableManager(TSoftObjectPtr<UObject> AssetPtr, FString& LoadPackagePath, const FOnAsyncLoadFinished& OnAsyncLoadFinished)
|
|
{
|
|
|
|
LoadPackagePath = FPaths::GetBaseFilename(AssetPtr.ToString(), false);
|
|
|
|
//异步加载
|
|
FStreamableManager& Streamable = UAssetManager::GetStreamableManager();
|
|
Streamable.RequestAsyncLoad(AssetPtr.ToSoftObjectPath(), FStreamableDelegate::CreateLambda([=]()
|
|
{
|
|
OnAsyncLoadFinished.ExecuteIfBound(LoadPackagePath);
|
|
}));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
float UAsyncLoadingFunctionLibrary::GetLoadProgress(FString LoadPackagePath)
|
|
{
|
|
//取得加载进度,压缩到0-1之间
|
|
float FloatPercentage = GetAsyncLoadPercentage(*LoadPackagePath) / 100.0f;
|
|
|
|
|
|
// FString ResultStr = FString::Printf(TEXT("Percentage: %f"), FloatPercentage);
|
|
// GEngine->AddOnScreenDebugMessage(-1, 2.0f, FColor::Green, ResultStr);
|
|
// UE_LOG(LogTemp, Warning, TEXT("Percentage: %f"), FloatPercentage);
|
|
|
|
return FloatPercentage;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|