最近在做在编辑器下用代码创建Texture2D,并保存在本地,因为有时要对资源做一些操作,比如缩放,合并RGBA,加减像素等操作,但是每次生成的Texture都无法真正保存在磁盘上,搞了很久终于明白是哪里出了问题,记下来
1.Flag一定要有Public不然看不到,还要有Standalone或SetRoot存下来
有关Flag含义看这里
https://docs.unrealengine.com/en-US/API/Runtime/CoreUObject/UObject/EObjectFlags/index.html
2.修改完像素后一定要Source.Init不然无法保存到磁盘
Saving the texture
到目前为止,我们已经在PlatformData中输入数据。但是,PlatformData是临时的,不能存入到disk上去。为了将数据输入到texture非临时的变量中去,我们需要引用Source字段
NewTexture->Source.Init(TextureWidth, TextureHeight, 1, 1, ETextureSourceFromat::TSF_BGRA8, Pixels);
3.Packge的命名及映射
FString pathPackage = A + "/" + FileName;
FString absolutePathPackage = FPaths::ProjectContentDir() + "/" + Path + "/";
FPackageName::RegisterMountPoint(A, *absolutePathPackage);
UPackage* Package = CreatePackage(nullptr, *pathPackage);
这里要把A映射一下
4.最后不要忘记
Texture->AddToRoot();
FAssetRegistryModule::AssetCreated(Texture);
参考:
虚幻4程序动态创建package资源并且导出资源
https://blog.csdn.net/qq_16756235/article/details/83004181
UE4 – Save a texture as a new asset
https://zhuanlan.zhihu.com/p/67983183
Copy RenderTarget2D:
TArray<FColor> RawColorArray;
auto RenderTarget = RT2D->GameThread_GetRenderTargetResource();
RenderTarget->ReadPixels(RawColorArray);