您的位置:首页 > 财经 > 金融 > 高德地图怎么导航环线_河北石家庄网站_网站设计公司_整站seo优化公司

高德地图怎么导航环线_河北石家庄网站_网站设计公司_整站seo优化公司

2025/1/16 16:09:30 来源:https://blog.csdn.net/charon8778/article/details/142489872  浏览:    关键词:高德地图怎么导航环线_河北石家庄网站_网站设计公司_整站seo优化公司
高德地图怎么导航环线_河北石家庄网站_网站设计公司_整站seo优化公司

准备工作

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"));}
}

插件效果

优化补充:删除MI类型的默认前后缀

M_ xxxxx_Inst

示例代码

		//如果类型是MI_old name里有M_和_Inst,移除他们。if (SelectedObject->IsA<UMaterialInstanceConstant>()){OldName.RemoveFromStart(TEXT("M_"));OldName.RemoveFromEnd(TEXT("_Inst"));}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com