UE5 C++: 插件编写04 | 自动增加前缀

准备工作

UObject* Asset

UObject* Asset 通常指的是一个指向UObject的指针。UObject是Unreal Engine中的基类,几乎所有的引擎对象都继承自UObject。这个指针可以引用任何派生自UObject的对象,比如蓝图、材质、贴图、音频资源等资产。

如果你看到UObject* Asset,它通常用于指向一个已加载或正在使用的引擎资产。你可以使用UObject*来动态加载资产。例如,使用StaticLoadObject()函数从文件路径加载一个资产。

UObject* Asset = StaticLoadObject(UObject::StaticClass(), nullptr, TEXT("/Game/MyAssetPath.MyAsset"));

Data Structure

TArray<FString> PrefixArray Slow in look up(查找缓慢)
TMap<UClass*,FString> PrefixMapFast in look up

inside the map you will have two elements, one is the key, one is the value

and for the key, it is our UClass (material/texture/blueprint)

TMap<UClass*, FString> PrefixMap

类型映射(TMap,它将一个键值对映射起来。

  • UClass* 是指向一个类对象的指针。UClass 示类的元类对象,通过 UClass*,可以引用 UE里的各种类类型, 如material,texture,blueprint。

  • FString 是一个字符串类型,存储文本数据,对应地如"M_"   "T_"  "BP_"。

build-in function

PrefixMap.Find(SelectedObject->GetClass())

includes and TPairs

#include "Materials/Material.h"
#include "Materials/MaterialInstanceConstant.h"   
#include "Sound/SoundCue.h"
#include "Sound/SoundWave.h"
#include "Engine/Texture.h"
#include "Blueprint/UserWidget.h"
#include "Components/SkeletalMeshComponent.h"
#include "NiagaraSystem.h"
//#include "NiagaraEmitter.h"    


        {UBlueprint::StaticClass(),TEXT("BP_")},
        {UStaticMesh::StaticClass(),TEXT("SM_")},
        {UMaterial::StaticClass(), TEXT("M_")},
        {UMaterialInstanceConstant::StaticClass(),TEXT("MI_")},
        {UMaterialFunctionInterface::StaticClass(), TEXT("MF_")},
        {USoundCue::StaticClass(), TEXT("SC_")},
        {USoundWave::StaticClass(), TEXT("SW_")},
        {UTexture::StaticClass(), TEXT("T_")},
        {UTexture2D::StaticClass(), TEXT("T_")},
        {UUserWidget::StaticClass(), TEXT("WBP_")},
        {USkeletalMeshComponent::StaticClass(), TEXT("SK_")},
        {UNiagaraSystem::StaticClass(), TEXT("NS_")},
        //{UNiagaraEmitter::StaticClass(), TEXT("NE_")}

示例代码

quickAssetAction.h

// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "AssetActionUtility.h"#include "Materials/Material.h"
#include "Materials/MaterialInstanceConstant.h"
//#include "Particles/ParticleSystem.h"    
#include "Sound/SoundCue.h"
#include "Sound/SoundWave.h"
#include "Engine/Texture.h"
#include "Blueprint/UserWidget.h"
#include "Components/SkeletalMeshComponent.h"
#include "NiagaraSystem.h"
//#include "NiagaraEmitter.h"    
#include "QuickAssetAction.generated.h"//should be the last one, otherwise will have error/*** */
UCLASS()
class SUPERMANAGER_API UQuickAssetAction : public UAssetActionUtility
{GENERATED_BODY()public://UFUNCTION(CallInEditor)//void TestFuckingFunc();UFUNCTION(CallInEditor)void BatchDuplication(int32 NumOfDuplicates);UFUNCTION(CallInEditor)void AddPrefixes();private:TMap<UClass*, FString>PrefixMap ={{UBlueprint::StaticClass(),TEXT("BP_")},{UStaticMesh::StaticClass(),TEXT("SM_")},{UMaterial::StaticClass(), TEXT("M_")},{UMaterialInstanceConstant::StaticClass(),TEXT("MI_")},{UMaterialFunctionInterface::StaticClass(), TEXT("MF_")},//{UParticleSystem::StaticClass(), TEXT("PS_")},{USoundCue::StaticClass(), TEXT("SC_")},{USoundWave::StaticClass(), TEXT("SW_")},{UTexture::StaticClass(), TEXT("T_")},{UTexture2D::StaticClass(), TEXT("T_")},{UUserWidget::StaticClass(), TEXT("WBP_")},{USkeletalMeshComponent::StaticClass(), TEXT("SK_")},{UNiagaraSystem::StaticClass(), TEXT("NS_")},//{UNiagaraEmitter::StaticClass(), TEXT("NE_")}};};

quickAssetAction.cpp


void UQuickAssetAction::AddPrefixes()
{TArray<UObject*>SelectedObjects = UEditorUtilityLibrary::GetSelectedAssets();uint32 Counter = 0;for (UObject* SelectedObject : SelectedObjects){if (!SelectedObject) continue;//空指针检查  SelectedObject 是 nullptrFString* PrefixFound = PrefixMap.Find(SelectedObject->GetClass());//这一行查找 SelectedObject 对象对应的类(SelectedObject->GetClass())在 PrefixMap 中的值。// PrefixMap 是一个自己命名的TMap<UClass*, FString>键值对的映射,// 其中键是 UClass*(对象的类)如material,值是 FString(M_)。if (!PrefixFound || PrefixFound->IsEmpty()){Print(TEXT("Failed to find prefix for class ") + SelectedObject->GetClass()->GetName(), FColor::Red);continue;}FString OldName = SelectedObject->GetName();if (OldName.StartsWith(*PrefixFound)){Print(OldName + TEXT(" already has prefix added"), FColor::Red);continue;}const FString NewNameWithPrefix = *PrefixFound + OldName;UEditorUtilityLibrary::RenameAsset(SelectedObject, NewNameWithPrefix);++Counter;//将计数器 Counter 的值增加 1。它用于记录处理了多少个对象。//在脚本完成后,下面那串代码输出一条信息,例如 "成功处理了 X 个对象"。}if(Counter>0){ShowNotifyInfo(TEXT("Successfully renamed " + FString::FromInt(Counter) + " assets"));}
}

插件效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/150000.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

openEuler普通用户su root时Permission denied

openEuler普通用户su root时Permission denied 背景&#xff1a; openEuler默认普通用户是不能通过su切换到root用户的 如果想通过su切换到root&#xff0c;有以下两个解决办法 1、修改/etc/pam.d/su 文件 [rootlocalhost ~]# vim /etc/pam.d/su #修改21行&#xff0c;将“…

微生物多样性数据的可视化技巧

在数据中穿梭找寻答案&#xff0c;是我们在探索微生物世界的过程中必不可少的一环。然而&#xff0c;单调的数据分析报告是否让你感觉枯燥乏味&#xff1f;这时候数据可视化的技术可就要来大展神通咯&#xff01;利用图表和图形唤醒沉睡的数据&#xff0c;科学与艺术的搭配&…

llamafactory0.9.0微调qwen2vl

LLaMA-Factory/data/README_zh.md at main hiyouga/LLaMA-Factory GitHubEfficiently Fine-Tune 100+ LLMs in WebUI (ACL 2024) - LLaMA-Factory/data/README_zh.md at main hiyouga/LLaMA-Factoryhttps://github.com/hiyouga/LLaMA-Factory/blob/main

2.2 信道的极限容量

奈奎斯特定理 香农定理 &#x1f30f;总结

Centos redis下载安装以及redis manager连接详细教程

一、redis下载以安装&#xff1a; 1.切换到home目录下 cd /home&#xff08;/是根目录&#xff0c;./是当前目录 ../是父目录&#xff09; 2.执行wget http://download.redis.io/releases/redis-5.0.2.tar.gz&#xff08;这里&#xff0c;不知道为什么安装6开头的版本在make的…

增强GPT4v的Grounding能力,image-level

论文地址&#xff1a;arxiv.org/pdf/2310.11441 代码地址&#xff1a;

Linux环境的JDK安装

1.搜索可用的jdk yum search jdk/(或者是要安装的版本java-11)2.安装需要的版本 yum install java-11-openjdk.x86_643.验证是否安装成功 java -version4.配置环境变量 通过yum安装的默认路径为&#xff1a;/usr/lib/jvm cd /etc/profile.d/ touch java_home.sh vim java_…

不靠学历,不拼年资,怎么才能月入2W?

之前统计局发布了《2023年城镇单位就业人员年平均工资情况》&#xff0c;2023年全国城镇非私营单位和私营单位就业人员年平均工资分别为120698元和68340元。也就是说在去年非私营单位就业人员平均月薪1W&#xff0c;而私营单位就业人员平均月薪只有5.7K左右。 图源&#xff1a;…

软件测试 -- 功能测试--测试用例设计(方法)

(测试用例写完&#xff0c;一般会进行用例评审&#xff0c;目的是对测试用例进行审查和评估&#xff0c;以确保测试用例的质量和完整性&#xff0c;从而提高测试的有效性和效率。用例评审通常由测试小组中的多个成员参与&#xff0c;包括测试人员、开发人员、业务分析师和项目经…

GPU 算力与 CUDA 版本对应关系

1. 查询 GPU 算力&#xff08;Compute Capability&#xff09; https://developer.nvidia.com/cuda-gpus#compute 2. GPU 算力与 CUDA 版本对应关系 2.1. 信息来源 1 NVIDIA Datacenter Drivers :: NVIDIA Data Center GPU Driver Documentation 2.2. 信息来源 2 https://e…

如何在openEuler上安装和配置openGauss数据库

本文将详细介绍如何在openEuler 22.03 LTS SP1上安装和配置openGauss数据库&#xff0c;包括数据库的启动、停止、远程连接配置等关键步骤。 1、安装 使用OpenEuler-22.03-LTS-SP1-x64版本的系统&#xff0c;通过命令行安装openGauss数据库。 1.1、确保系统软件包索引是最新…

ret2dl_resolve

前言&#xff1a; ret2dl_resolve 是一种利用漏洞进行攻击的技术&#xff0c;主要针对使用动态链接库的程序。它的核心原理是利用程序的重定位机制&#xff0c;通过构造特定的函数返回地址&#xff0c;来劫持控制流并执行攻击者选择的代码。以下是对 ret2dl_resolve 原理的详细…

[oeasy]python035_根据序号得到字符_chr函数_字符_character_

字符(character) 回忆上次内容 上次了解了ord函数 ord 的意思是 ordinal(序号) ord函数 可以 根据字符得到序号 那么 可以 反过来 吗&#xff1f; 根据序号 得到字符可以 吗&#xff1f;&#x1f914; ord的逆运算 首先进入游乐场 ord 根据参数"h" 得到序号104 chr…

EtherCAT转Profient协议网关简述

Profinet 转 EtherCAT 的连接与通信问题一直是许多人关注的焦点&#xff0c;也常常给人们带来诸多困惑。在此&#xff0c;我们将深入剖析这一问题&#xff0c;并为大家提供切实可行的解决方案。WL-PN-ECATM型设备在这方面表现卓越&#xff0c;能够有效解决这一难题。接下来&…

视频制作软件哪个好?前十名推荐!

在视频制作领域&#xff0c;选择合适的软件是提升创作效率和作品质量的关键。本文将根据软件的适用人群&#xff1a;新手入门和专业领域&#xff0c;以及推荐的书籍&#xff0c;为您详细介绍视频制作软件的前十名。 新手入门级别&#xff1a; 1.影忆 功能特点&#xff1a;新手入…

实现领域驱动设计(DDD)系列详解:集成限界上下文

一个项目中通常存在着多个限界上下文&#xff0c;并且我们需要在它们之间进行集成。 在上下文映射图中存在两种主要形式&#xff1a;一种是通过绘制一些简单的框图来展示它们之间的集成关系&#xff1b;另一种则是通过代码来实现这些集成关系。 到了具体的技术实现&#xff0…

设计模式之备忘录

一、备忘录设计模式概念 备忘录模式&#xff08;Memento&#xff09; 是一种行为设计模式&#xff0c; 允许在不暴露对象实现细节的情况下保存和恢复对象之前的状态。 适用场景 当你需要创建对象状态快照来恢复其之前的状态时&#xff0c; 可以使用备忘录模式。当直接访问对象的…

羽毛球场馆预约系统,便捷管理预约

全国羽毛球运动的热度不断上升&#xff0c;在健身行业中掀起了一股羽毛球热潮。同时羽毛球运动的风靡&#xff0c;也吸引了不少人入局&#xff0c;各种大大小小的羽毛球馆不断出现&#xff0c;为大众的羽毛球喜好提供了场地。 随着互联网的发展&#xff0c;羽毛球馆也开始向线…

双控开关接入NVBoard

导入NVBoard git仓库&#xff1a;https://github.com/NJU-ProjectN/nvboard 按照ysyx手册的要求&#xff0c;初始化NVBoard项目。 由于GitHub在国外&#xff0c;可能会超时无响应&#xff1a; 解决方案是修改代理。 当前的运行环境是VM VirtualBox虚拟机&#xff0c;网卡是…

豆包PixelDance:超越Runway和Sora的AI视频模型出炉

2024年9月24日&#xff0c;北京——字节跳动在火山引擎发布会上&#xff0c;震撼发布了两款AI视频模型&#xff1a;豆包视频生成的PixelDance模型和Seaweed模型&#xff0c;标志着AI视频技术迈入了一个全新的纪元。今天&#xff0c;我们将聚焦于豆包PixelDance模型&#xff0c;…