반응형
에디터에 액터를 배치하고 난이후 액터를 선택 했을때 어떠한 구현을 하거나 선택 해제가 되었을때 어떠한 구현을 해야할 경우 이러한 이벤트를 통보 받을 수 있어야 겠습니다.
다음 페이지를 참고하였으며 구현 코드는 아래에 있습니다. UrealEd가 포함된 에디터 모듈에서 구현 해야합니다.
https://docs.unrealengine.com/4.27/en-US/API/Runtime/Engine/Engine/USelection/
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;
}
}
'게임 개발 > Unreal Engine' 카테고리의 다른 글
[UE4] 에디터 뷰포트 카메라 얻기(Editor Viewport Camera) (0) | 2022.06.11 |
---|---|
[UE4] 커스텀 구조체 TArray Contains 동작을 위한 oprator== 구현 (0) | 2022.06.11 |
[UE5] Lyra 분석 - AnimBP Tour (0) | 2022.05.17 |
[UE5] TObjectPtr<T> 소개 (0) | 2022.05.10 |
[UE5] Quixel Bridge가 보이지 않는 현상 수정 (0) | 2022.05.02 |