首页 > 代码库 > Unreal Engine 4 C++ 为编辑器中Actor创建自定义图标

Unreal Engine 4 C++ 为编辑器中Actor创建自定义图标

有时候我们创建场景的时候,特定的Actor我们想给它一个特定的图标,便于观察。比如这样:


实现起来也很简单,需要编写C++代码:

我们创建一个Actor,叫AMyActor,它包含一个Sprite(精灵),这个精灵负责显示自定义图标:代码如下

#pragma once

#include "GameFramework/Actor.h"
#include "Components/BillboardComponent.h"
#include "MyActor.generated.h"

/**
 * 
 */
UCLASS()
class NANTOPDOWN_API AMyActor : public AActor
{
	GENERATED_UCLASS_BODY()

	//virtual void BeginPlay() OVERRIDE;

	UPROPERTY()
	TSubobjectPtr<UBillboardComponent> SpriteComponent;

	UTexture2D* SpriteTexture;
	
};

#include "NanTopDown.h"
#include "MyActor.h"


AMyActor::AMyActor(const class FPostConstructInitializeProperties& PCIP)
	: Super(PCIP)
{
	struct FConstructorStatics
	{
		ConstructorHelpers::FObjectFinderOptional<UTexture2D> NoteTextureObject;

		FName ID_Notes;
		FText Name_Notes;

		FConstructorStatics()
			: NoteTextureObject(TEXT("Texture2D'/Game/Textures/MyIcon.MyIcon'"))
			, ID_Notes(TEXT("Notes"))
			, Name_Notes(NSLOCTEXT("SpriteCategory", "Notes", "Notes"))
		{
		}
	};
	
		static FConstructorStatics Cs;
		TSubobjectPtr<USceneComponent> SceneComponent = PCIP.CreateDefaultSubobject<USceneComponent>(
			this, TEXT("SceneComp"));
		RootComponent = SceneComponent;
		RootComponent->Mobility = EComponentMobility::Static;

#if WITH_EDITORONLY_DATA
		SpriteComponent = PCIP.CreateEditorOnlyDefaultSubobject<UBillboardComponent>(this, TEXT("Sprite"));
		if (SpriteComponent)
		{
			SpriteComponent->Sprite = Cs.NoteTextureObject.Get();
			SpriteComponent->SpriteInfo.Category = Cs.ID_Notes;
			SpriteComponent->SpriteInfo.DisplayName = Cs.Name_Notes;
			SpriteComponent->AttachParent = RootComponent;
			SpriteComponent->Mobility = EComponentMobility::Static;
		}
#endif
}


AMyActor只有一个UBillboardComponent组件,加入场景就可以看到自定义的图片了。


参考文章:https://wiki.unrealengine.com/Add_in_editor_Icon_to_your_Custom_Actor

Unreal Engine 4 C++ 为编辑器中Actor创建自定义图标