批量替换的逻辑很简单,找到所有的UI面板下的贴图资源,然后替换为同名的Sprite资源。主要是UE4的使用哪些API的问题,时间都花在查源码找API上。所以这里把代码贴出来。
void SWidgetUiTool::OnReplaceToSprite()
{
FAssetRegistryModule& AssetRegistryModule = FModuleManager::LoadModuleChecked<FAssetRegistryModule>("AssetRegistry");
const UClass* SpriteClass = UPaperSprite::StaticClass();
AssetRegistryModule.Get().GetAssetsByClass(SpriteClass->GetFName(), SpriteAssets);
TArray<FAssetData> assetDatas;
const UClass* BlueprintWidgetClass = UWidgetBlueprint::StaticClass();
AssetRegistryModule.Get().GetAssetsByClass(BlueprintWidgetClass->GetFName(), assetDatas);
TArray<UPackage*> savePackages;
bool isModify = false;
for (int i = 0; i < assetDatas.Num(); i++)
{
UObject* widgetObject = assetDatas[i].GetAsset();
UWidgetBlueprint* widget = Cast<UWidgetBlueprint>(widgetObject);
if (widget == NULL)
continue;