UE5基于RumtimeFBXImport插件使用C++加载服务器上fbx文件方法

avatar
作者
猴君
阅读量:1

        UE5的RumtimeFBXImport插件其实只能加载本机的fbx文件,要加载服务器上的fbx文件的话,需要先将该fbx文件下载到本地,然后再使用RumtimeFBXImport插件加载。

        示例文件如下:

#include "Loader/WebLoader.h" #include "Misc/FileHelper.h" #include "Misc/Paths.h" #include "HttpModule.h" #include "Http.h" #include "FBXImportManager.h"  AWebLoader::AWebLoader(){}  void AWebLoader::BeginPlay() { 	Super::BeginPlay();  	if (WebFbxPath.Len() > 0) 	{ 		LoadFileFromServer(WebFbxPath); 	} }  void AWebLoader::LoadFileFromServer(const FString& URL) { 	TSharedRef<IHttpRequest, ESPMode::ThreadSafe> HttpRequest = FHttpModule::Get().CreateRequest(); 	HttpRequest->SetURL(URL); 	HttpRequest->SetVerb("GET"); 	HttpRequest->OnProcessRequestComplete().BindUObject(this, &AWebLoader::OnFileDownloadComplete); 	HttpRequest->ProcessRequest(); }  void AWebLoader::OnFileDownloadComplete(FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful) { 	if (bWasSuccessful && Response.IsValid() && Response->GetResponseCode() == EHttpResponseCodes::Ok) 	{ 		FString ProjectRoot = FPaths::Combine(FPaths::ProjectDir(), LocalRelatedPath); 		FString FileName = FPaths::GetCleanFilename(WebFbxPath); 		FString LocalFullPath = FPaths::Combine(ProjectRoot, FileName);  		if (!FFileHelper::SaveArrayToFile(Response->GetContent(), *LocalFullPath)) 		{ 			UE_LOG(LogTemp, Error, TEXT("File downloaded failed!")); 			return; 		} 		// 		LoadLocalFBX(LocalFullPath); 	} 	else 	{ 		UE_LOG(LogTemp, Error, TEXT("File download failed.")); 	} }  void AWebLoader::LoadLocalFBX(FString LocalFullPath) { 	if (!FBXImportManager) 	{ 		FBXImportManager = GetWorld()->SpawnActor<AFBXImportManager>(); 	}  	FBXImportManager->InitializeFBXLoad(); 	FBXImportManager->ImportFBXFile(LocalFullPath, FVector::UpVector, BaseMaterial, EFBXCollisionType::MeshCollision); }

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!