#1. 문제
Input Component 혹은 Character Movement Component에 대한 별도의 사용자 정의 함수 및 변수들을 추가하기 위해 이들을 상속하는 하위 클래스를 선언할 수 있습니다. 하지만, 미리 정의된 액터 컴포넌트들을 두고 캐릭터 객체에 이들의 하위 컴포넌트들을 추가적으로 붙이기 애매한 상황.
#2. 해결
1. 생성자 변경
UCLASS()
class AGEOFWOLVES_API APlayerCharacter : public ACharacterBase
{
public:
// Sets default values for this character's properties
APlayerCharacter(const FObjectInitializer& ObjectInitializer);
//...
};
기존의 생성자(인자가 없는)를 사용하지 않고, FObjectInitializer 유형의 참조를 인자로 하는 생성자를 활용합니다.
2. 초기화 리스트
APlayerCharacter::APlayerCharacter(const FObjectInitializer& ObjectInitializer)
:Super(ObjectInitializer
.SetDefaultSubobjectClass<UBaseCharacterMovementComponent>(ACharacter::CharacterMovementComponentName)
.SetDefaultSubobjectClass<UBaseInputComponent>(TEXT("Input Component"))
)
{
//...
}
이미 상위 클래스(ACharacter)에서 특정 Actor Component(Character Movement Comp, Input Comp)를 Subobject로 설정한 경우, 초기화 리스트를 활용하여 이 친구들의 하위 클래스로 타입을 변경해 줍니다. 코드 문법이 다소 낯설지만, 이렇게 작성해도 에러 없이 정상적으로 동작합니다.
3. 결과
APlayerCharacter의 블루프린트 클래스를 살펴보면, 위 처럼 Character Movement Component가 Base Character Movement Component(사용자 정의 하위 클래스)로 변경된 것을 확인할 수 있습니다!
'게임개발 > Unreal C++' 카테고리의 다른 글
[Unreal]#UBlueprintAsyncActionBase (0) | 2024.07.01 |
---|---|
[Unreal]#27_Actor 클래스 vs Character 클래스 (0) | 2024.06.25 |
[Unreal_Tip]#1_Log 깨짐 현상(한글) (0) | 2024.04.10 |
[Unreal]#26_Subsystem, 하위 시스템 (0) | 2024.03.19 |
[Unreal]#27_Enhanced Input (2) | 2024.03.01 |