게임 개발/Unreal Engine

[UE4] AActor 에디터에서 선택 Event 구현

지노윈 2022. 6. 9. 20:21
반응형

 

에디터에 액터를 배치하고 난이후 액터를 선택 했을때 어떠한 구현을 하거나 선택 해제가 되었을때 어떠한 구현을 해야할 경우 이러한 이벤트를 통보 받을 수 있어야 겠습니다.

 

다음 페이지를 참고하였으며 구현 코드는 아래에 있습니다. UrealEd가 포함된 에디터 모듈에서 구현 해야합니다.

https://docs.unrealengine.com/4.27/en-US/API/Runtime/Engine/Engine/USelection/

 

USelection

Manages selections of objects.

docs.unrealengine.com

 

header 파일 구현 입니다.

#pragma once

#include "CoreMinimal.h"
#include "Plus/SpawnSystem/PlusSpawnWave.h"
#include "PlusSpawnWaveEditor.generated.h"

UCLASS()
class PLUSEDITOR_API APlusSpawnWaveEditor : public APlusSpawnWave
{
	GENERATED_BODY()

public:
	APlusSpawnWaveEditor();
	virtual void Tick(float DeltaTime) override;
	
protected:
	virtual void BeginPlay() override;
	virtual void PostActorCreated() override;
	virtual void BeginDestroy() override;

private:
	UFUNCTION()
	void OnSelectionChanged(UObject* InObject);
	
protected:
	FDelegateHandle OnSelectionChangedDelegateHandle;

private:	
	bool bWasSelected = false;
};

cpp 파일 구현입니다.

...

void APlusSpawnWaveEditor::PostActorCreated()
{
	Super::PostActorCreated();

	if (!OnSelectionChangedDelegateHandle.IsValid())
	{
		OnSelectionChangedDelegateHandle = USelection::SelectionChangedEvent.AddUObject(this, &APlusSpawnWaveEditor::OnSelectionChanged);
	}
}

void APlusSpawnWaveEditor::BeginDestroy()
{
	if (OnSelectionChangedDelegateHandle.IsValid())
	{
		USelection::SelectionChangedEvent.Remove(OnSelectionChangedDelegateHandle);
		OnSelectionChangedDelegateHandle.Reset();
	}
	Super::BeginDestroy();
}


void APlusSpawnWaveEditor::OnSelectionChanged(UObject* InObject)
{
	if (IsSelected())
	{
		UE_LOG(LogTemp, Warning, TEXT("SELECTED"));
		bWasSelected = true;
	}
	else if (bWasSelected)
	{
		UE_LOG(LogTemp, Warning, TEXT("DE-SELECTED"));
		bWasSelected = false;
	}
}