언리얼 C++ 액터 클래스로 움직이는 플랫폼을 만들고자 하는데,
움직임의 기준이 되는 축을 변수로 만들고, 에디터에서 바로바로 바꿀 수 있으면 편할 것 같아서
열거형에 리플렉션 시스템을 활용하는 방식을 찾아보았다.
사실 일반적으로 열거형 선언하는 것과 거의 동일한데, 주의할 점 위주로 정리하기로 했다.
표준 열거형 X / 열거형 클래스 O
C-style 표준 열거형이 아니라, 열거형 클래스로 생성하는 것이 언리얼 엔진의 코딩 스탠다드이다.
이에 대해서는 아래를 참고했다.
포럼 : https://stackoverflow.com/questions/62011640/referencing-enum-c-unreal
아래와 같이 테스트를 해보았다. (EAxis 에 대해서는 추후 설명)
EAxisType2 의 경우, 열거형 클래스가 아닌 일반 열거형으로 선언되어 있다.
이 열거형 타입의 변수를 생성하고 활용하려고 코드 작성 후 빌드를 하면, raw enum 은 TEnumAsByte 를 활용하거나 C++ 11 부터 표준이 된 enum class 를 사용하라는 오류를 확인할 수 있다. 위의 참고 링크에 보면 관련 내용이 쓰여 있다.
단, 아래와 같이 TEnumAsByte 에 죽음...을 선언하는 글도 있다.
https://www.developd.au/devblog-post/death-to-tenumasbyte-unreal-c
그래서... 열거형 클래스를 아래와 같이 만들어 활용했다.
UENUM (BlueprintType) 은 uint8 타입만 지원
UENUM 매크로를 통해 리플렉션 시스템에 BlueprintType 으로 등록하기 위해서는 uint8 타입으로 지정이 필요하다.
지정하지 않으면 아래와 같은 오류가 뜬다.
이러한 열거형을 활용해 아래와 같이 변수를 생성하고 UPROPERTY 매크로로 리플렉션 시스템에 등록한 뒤,
에디터 상에서 간편하게 움직임의 축을 수정할 수 있게 되었다.
// 헤더 파일 변수 선언
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Properties|Movement")
EAxisType MoveAxis;
// ...
// 클래스 생성자에서 초기화
MoveAxis = EAxisType::X;
언리얼 엔진의 EAxis 열거형
위의 코드를 작성하다보니 아래와 같이 이미 선언되어 있는 EAxis 라는 열거형이 보였다.
정의를 확인해 보니 아래와 같다.
단, 위와 같은 문제(열거형 클래스가 아니라 일반 enum)로 TEnumAsByte 를 필요로 하므로, 참고만 하고 위에 직접 만든 열거형을 활용하기로 했다.
'언리얼_엔진_게임개발_공부 > 언리얼 C++' 카테고리의 다른 글
[언리얼/C++] OnComponentBeginOverlap - 액터 오버랩 시 함수 호출 / FindPlayerStart - 게임모드의 플레이어스타트 가져오기 (0) | 2025.01.27 |
---|---|
[언리얼/C++] 타이머 사용하기 / FTimerManager, FTimerHandle, SetTimer() (0) | 2025.01.24 |
[언리얼/C++] 비트마스크 Bitmask / TryFindType, UnknownFunction 경고 해결 (1) | 2025.01.21 |
[언리얼/C++] Tick 함수로 메쉬 스케일 변경 (커졌다 작아졌다 하게) (0) | 2025.01.21 |
[언리얼/C++] 액터에 컴포넌트 추가 및 에셋 적용 (1) | 2025.01.20 |