Add in editor Icon to your Custom Actor
Contents
Overview
Greetings!
This is a code snippets show you how to add in editor icon to your custom Actor.
Just like this:
I add some comment for reference.
MyActor.h
// Copyright 1998-2014 Epic Games, Inc. All Rights Reserved.
#pragma once
#include "GameFramework/Actor.h"
#include "MyActor.generated.h"
/**
*
*/
UCLASS()
class AMyActor : public AActor
{
GENERATED_UCLASS_BODY()
virtual void BeginPlay() OVERRIDE;
UPROPERTY()
// A UBillboardComponent to hold Icon sprite
TSubobjectPtr<UBillboardComponent> SpriteComponent;
// Icon sprite
UTexture2D* SpriteTexture;;
};
//Old
TSubobjectPtr<UBillboardComponent> SpriteComponent;
//New
UBillboardComponent* SpriteComponent;
MyActor.cpp
// Copyright 1998-2014 Epic Games, Inc. All Rights Reserved.
#include "MyActor.h"
AMyActor::AMyActor(const class FPostConstructInitializeProperties& PCIP)
: Super(PCIP)
{
// Structure to hold one-time initialization
struct FConstructorStatics
{
// A helper class object we use to find target UTexture2D object in resource package
ConstructorHelpers::FObjectFinderOptional<UTexture2D> NoteTextureObject;
// Icon sprite category name
FName ID_Notes;
// Icon sprite display name
FText NAME_Notes;
FConstructorStatics()
// Use helper class object to find the texture
// "/Engine/EditorResources/S_Note" is resource path
: NoteTextureObject(TEXT("/Engine/EditorResources/S_Note"))
, ID_Notes(TEXT("Notes"))
, NAME_Notes(NSLOCTEXT("SpriteCategory", "Notes", "Notes"))
{
}
};
static FConstructorStatics ConstructorStatics;
// We need a scene component to attach Icon sprite
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 = ConstructorStatics.NoteTextureObject.Get(); // Get the sprite texture from helper class object
SpriteComponent->SpriteInfo.Category = ConstructorStatics.ID_Notes; // Assign sprite category name
SpriteComponent->SpriteInfo.DisplayName = ConstructorStatics.NAME_Notes; // Assign sprite display name
SpriteComponent->AttachParent = RootComponent; // Attach sprite to scene component
SpriteComponent->Mobility = EComponentMobility::Static;
}
#endif // WITH_EDITORONLY_DATA
}
//Old
AMyActor::AMyActor(const class FPostConstructInitializeProperties& PCIP)
: Super(PCIP)
{
//New
AMyActor::AMyActor(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
{
//Old
TSubobjectPtr<USceneComponent> SceneComponent = PCIP.CreateDefaultSubobject<USceneComponent>(this, TEXT("SceneComp"));
//New
USceneComponent* SceneComponent = ObjectInitializer.CreateDefaultSubobject<USceneComponent>(this, TEXT("SceneComp"));
//Old
SpriteComponent = PCIP.CreateEditorOnlyDefaultSubobject<UBillboardComponent>(this, TEXT("Sprite"));
//New
SpriteComponent = ObjectInitializer.CreateEditorOnlyDefaultSubobject<UBillboardComponent>(this, TEXT("Sprite"));
//Old
SpriteComponent->AttachParent = RootComponent;
//New
SpriteComponent->AttachToComponent(RootComponent, FAttachmentTransformRules::KeepWorldTransform);
Conclusion
Please refer to Engine\Source\Runtime\Engine\Private\Note.cpp for more information.
Enjoy!