有时候我们创建场景的时候,特定的Actor我们想给它一个特定的图标,便于观察。比方这样:
实现起来也非常easy。须要编写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() TSubobjectPtrSpriteComponent; UTexture2D* SpriteTexture; };
#include "NanTopDown.h"#include "MyActor.h"AMyActor::AMyActor(const class FPostConstructInitializeProperties& PCIP) : Super(PCIP){ struct FConstructorStatics { ConstructorHelpers::FObjectFinderOptionalAMyActor仅仅有一个UBillboardComponent组件。增加场景就能够看到自己定义的图片了。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 SceneComponent = PCIP.CreateDefaultSubobject ( this, TEXT("SceneComp")); RootComponent = SceneComponent; RootComponent->Mobility = EComponentMobility::Static;#if WITH_EDITORONLY_DATA SpriteComponent = PCIP.CreateEditorOnlyDefaultSubobject (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}
參考文章:https://wiki.unrealengine.com/Add_in_editor_Icon_to_your_Custom_Actor