有时候我们创建场景的时候,特定的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()
-
-
-
- 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组件,加入场景就可以看到自定义的图片了。