ゲームモジュール
HogeComponent.h
UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) )
class TTLEXTENSION_API UHogeComponent : public UActorComponent
{
GENERATED_BODY()
public:
UHogeComponent();
UPROPERTY(EditAnywhere, Category = "Variable")
float Radius;
};
エディターモジュール
- コンポーネントを表示する為のコード
HogeComponentVisualizer.h
#include "UnrealEd.h"
#include "ComponentVisualizer.h"
class FHogeComponentVisualizer
: public FComponentVisualizer
{
public:
virtual void DrawVisualization(const UActorComponent* Component, const FSceneView* View, FPrimitiveDrawInterface* PDI) override;
};
HogeComponentVisualizer.cpp
void FHogeComponentVisualizer::DrawVisualization(const UActorComponent* Component, const FSceneView* View, FPrimitiveDrawInterface* PDI)
{
if (const UHogeComponent* Hoge = Cast<UHogeComponent>(Component))
{
if (AActor* Owner = Hoge->GetOwner())
{
// 球体を表示
DrawWireSphere(PDI, Owner->GetActorLocation(), FColor::Yellow, Hoge->Radius, 16, SDPG_World);
}
}
}
- コンポーネント表示を有効にする為のコード
モジュール.cpp
virtual void FHogeModule::StartupModule() override final
{
if (GUnrealEd)
{
GUnrealEd->RegisterComponentVisualizer(UHogeComponent::StaticClass()->GetFName(), MakeShareable(new FHogeComponentVisualizer));
}
}
void FHogeModule::ShutdownModule()
{
if (GUnrealEd)
{
GUnrealEd->UnregisterComponentVisualizer(UHogeComponent::StaticClass()->GetFName());
}
}
- プロジェクトの読込タイミング
UnrealEdが読み込まれるより早く、モジュールの開始が行われると、GUnrealEdがnullptrになってしまうためコンポーネントの表示が有効になりません。
モジュールの読込タイミングのパラメータを"LoadingPhase": "PostEngineInit"にしてください
プロジェクト名.uproject
"Modules": [
{
"Name": "エディターモジュール",
"Type": "Developer",
"LoadingPhase": "PostEngineInit"
},
(以下省略
]
}