免费商城网站建设平台,企业全网推广公司,帝国视频网站模板,自助网站建设软件目录
了解相关的函数
第一种做法#xff1a;自定义添加选择资产的前缀或后缀
代码
效果
第二种做法#xff1a;通过映射来获取资产类型添加前缀和修改前缀
映射代码
代码
效果 在之前一章中#xff0c;我们创建了插件#xff0c;用来扩展编辑器的使用#xff1a; …目录
了解相关的函数
第一种做法自定义添加选择资产的前缀或后缀
代码
效果
第二种做法通过映射来获取资产类型添加前缀和修改前缀
映射代码
代码
效果 在之前一章中我们创建了插件用来扩展编辑器的使用
UE5.1编辑器拓展【一、脚本化资产行为通知弹窗高效复制多个同样的资产】-CSDN博客
现在我们需要的是能够更快的对资产的名字进行一个更改比如对前缀名的添加或者是后缀的删除等等。
了解相关的函数
要更改资产的名字首先我们要先了解几个相关的编辑器函数以及FString的使用
首先是RenameAsset这个函数是属于UEditorUtilityLibrary使用的时候就是输入资产和新的名字。
然后是FString的使用这里只需要即可比如你要加前缀Prefix,则Prefixname即可后缀也是一样。
当然这只是一种做法除此之外还有通过判断类型来直接添加名字。
第一种做法自定义添加选择资产的前缀或后缀
如果是需要自定义选择前缀名那么我们需要的是输入一个FString和一个bool。
通过bool来判断你是要添加前缀还是后缀。
首先遍历选择的资产然后检查是否有效然后判断是添加前缀还是后缀最后进行添加。
然后右下角通知添加前缀成功。
代码
void UQuicklyAssetAction::AddAssetPreOrEndfixes(FString Assetfixes, bool PrefixOrPostfix)
{TArrayUObject* SelectedObjects UEditorUtilityLibrary::GetSelectedAssets();uint32 Counter 0;for (UObject* SelectedObject : SelectedObjects){if (!SelectedObject)//检查是否有效{continue;}FString NewName;if (PrefixOrPostfix)//添加前缀{NewName Assetfixes SelectedObject-GetName();}else//添加后缀{NewName SelectedObject-GetName() Assetfixes;}UEditorUtilityLibrary::RenameAsset(SelectedObject, NewName);Counter;}if (Counter0){if (PrefixOrPostfix){ShowNotifyInfo(Prefix add FString::FromInt(Counter) files,7);}else{ShowNotifyInfo(Postfix add FString::FromInt(Counter) files, 7);}}
}
效果
可以看到里面有相关注释和行为 然后点击 第二种做法通过映射来获取资产类型添加前缀和修改前缀
首先我们做一个映射这个映射的作用就是判断你的资产是属于哪种类的存在
映射代码
TMapUClass*, FString PrefixMap {{UBlueprint::StaticClass(),TEXT(BP_)},{UStaticMesh::StaticClass(),TEXT(SM_)},{UMaterial::StaticClass(),TEXT(M_)},{UMaterialInstanceConstant::StaticClass(),TEXT(MI_)},{UMaterialFunction::StaticClass(),TEXT(MF_)},{UParticleSystem::StaticClass(),TEXT(PS_)},{USoundCue::StaticClass(),TEXT(SC_)},{USoundWave::StaticClass(),TEXT(SW_)},{UTexture::StaticClass(),TEXT(T_)},{UTexture2D::StaticClass(),TEXT(T2D_)},{UUserWidget::StaticClass(),TEXT(UI_)},//用户控件无效需要继续寻找{USkeletalMeshComponent::StaticClass(),TEXT(SK_)},{UNiagaraSystem::StaticClass(),TEXT(NS_)},{UNiagaraEmitter::StaticClass(),TEXT(NE_)}};
做好这个映射之后【有些可能有问题需要自己去重新查找一下相关的类】
接下来和之前一样去遍历我们选择的资产然后寻找资产的类来获取我们做的映射中的value值【前缀】。
然后在获取资产名字来判断这个资产是否已经有了和这个一样的前缀有了就不加了。
然后继续做一个判断假如你做了一个材质实例那么其名字必然是M_XXX_Inst,我们如果直接添加了名字就会变成MI_M_XXX_Inst,所以在添加之前我们需要先判断一下前缀是不是M_和后缀是不是_Inst。
是的话就进行删除然后在重命名。
代码
void UQuicklyAssetAction::WithClassAddAssetPrefixes()
{//将选择的资产放入数组TArrayUObject* SelectedObjects UEditorUtilityLibrary::GetSelectedAssets();uint32 Counter 0;//遍历选择的资产for (UObject* SelectedObject : SelectedObjects){//如果无效则跳入下一次迭代if (!SelectedObject){continue;}//返回的是FString指针通过选择资产的类作为key来找到PrefixMap映射中的value如M_FString* PrefixFound PrefixMap.Find(SelectedObject-GetClass());//判断是否有效和存在if (!PrefixFound || PrefixFound-IsEmpty()){//无效则打印没有找到然后输出这个类的类的名字DebugPrint(TEXT(Failed to find Prefix for class ) SelectedObject-GetClass()-GetName(), FColor::Red);DebugPrintLog(TEXT(Failed to find Prefix for class ) SelectedObject-GetClass()-GetName());continue;}//获取老资产的名字FString OldName SelectedObject-GetName();//判断资产的名字是否以PrefixFound开头如M_if (OldName.StartsWith(*PrefixFound)){DebugPrint(OldName already have the prefix!, FColor::Red);DebugPrintLog(OldName already have the prefix!);continue;}//这里做材质实例的检查if (SelectedObject-IsAUMaterialInstanceConstant()){//检查有没有有就移除OldName.RemoveFromStart(M_);OldName.RemoveFromEnd(_Inst);}//做新的名字const FString NewNameWithPrefix *PrefixFound OldName;//重命名和计数UEditorUtilityLibrary::RenameAsset(SelectedObject, NewNameWithPrefix);Counter;}if (Counter0){ShowNotifyInfo(Success rename Asset FString::FromInt(Counter) Assets, 7);}
}
效果