需求分析:
在项目开发过程中,有一个需求是对相机调整偏移值,并且调整后需要保存,以便下一次打开读取赋值。
解决方案:
根据这个需求,制作一个临时的方案,在此记录。
基本逻辑是:
1.将偏移值FVector保存成字符串,以逗号分隔。例如:0,0,0
2.读取的时候,将字符串读取为FVector返回。
3.我将代码写在了蓝图库脚本中,以便全局调用。
代码:
.h 文件
public:
UFUNCTION(BlueprintCallable, Category = "Test")
static FVector GetCameraOffest();
UFUNCTION(BlueprintCallable, Category = "Test")
static void SaveCameraOffest(FVector offset);
.cpp文件
#include "Misc/FileHelper.h"
#include "Kismet/GameplayStatics.h"
#include "Containers/Array.h"
FVector UMyUDPBPFunctionLibrary::GetCameraOffest()
{
FString ProjectDir = FPaths::ProjectDir();
FString ConfigFilePath = FPaths::Combine(ProjectDir, TEXT("cameraoffest.txt"));
if (FPaths::FileExists(ConfigFilePath)==false)
{
FFileHelper::SaveStringToFile(TEXT(""), *ConfigFilePath);
}
FString FileContent;
if (FFileHelper::LoadFileToString(FileContent, *ConfigFilePath))
{
TArray<FString> Lines;
FileContent.ParseIntoArray(Lines, TEXT(","), true);
return FVector(FCString::Atof(*Lines[0]), FCString::Atof(*Lines[1]), FCString::Atof(*Lines[2]));
}
return FVector(0,0,0);
}
void UMyUDPBPFunctionLibrary::SaveCameraOffest(FVector offset)
{
FString ProjectDir = FPaths::ProjectDir();
FString ConfigFilePath = FPaths::Combine(ProjectDir, TEXT("cameraoffest.txt"));
if (FPaths::FileExists(ConfigFilePath) == false)
{
IPlatformFile& PlatformFile = FPlatformFileManager::Get().GetPlatformFile();
PlatformFile.DeleteFile(*ConfigFilePath);
}
FString Result = FString::Printf(TEXT("%.2f, %.2f, %.2f"), offset.X, offset.Y, offset.Z);
FFileHelper::SaveStringToFile(Result, *ConfigFilePath);
}