inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해

2강 캐릭터와 입력 시스템

SetupPlayerInputComponent 함수에 대한 전반적 이해 질문...

해결된 질문

1054

themoon007

작성한 질문수 98

0

void AABCharacterPlayer::SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent)
{
	Super::SetupPlayerInputComponent(PlayerInputComponent);

	// 반드시 UInputComponent를 가져올 수 있도록 CastChecked를 사용해서 없으면 에러 발생되게 함
	UEnhancedInputComponent* EnhancedInputComponent = CastChecked<UEnhancedInputComponent>(PlayerInputComponent);

...
}

SetupPlayerInputComponent 라는 함수와 매개변수인 UInputCompononent가 무엇인지 전체적인 그림이 잘 그려지지 않습니다....

 

지금은 향상된 입력을 수행하는 녀석이라고 이해하고 있는데 보니까 BeginPlay() 하기전에 실행되기도 하고.....

 

UInputCompononent가 어디에서 온건지, 커스텀으로 에디터에서 만들고 등록할 수 있는건지. 전반적인 이해가 필요한데요.

 

이 함수와 매개변수에 대한 자세한 건 나중에 또 나오나요??

unreal-engine ue-blueprint 언리얼-c++

답변 1

2

이득우

음.. 언리얼 엔진의 입력 시스템은 꽤나 복잡한 구조를 가지고 있습니다.
Part2 강의는 콘텐츠 제작에 중점을 두다보니 이런 프레임웍의 메카니즘을 깊숙히 설명하는데 할애하지는 않았습니다. 콘텐츠 제작하는데 있어서 해당 함수에서 초기 입력 값 세팅을 진행한다 정도로 이해하시면 충분합니다. 이 함수는 언리얼 엔진이 정해준 프레임웍이고 이런 정해진 함수가 상당히 많습니다.
그런데 외워서 사용하는 방식이 답답하고, 내부적으로 어떻게 동작하는지 궁금하다면 소스코드를 직접 보시면 됩니다.
마법의 단축키 Ctrl+Shift+F키로 SetupPlayerInputComponent를 검색해보세요.
가장 하단에 Pawn.cpp 소스에서 이 함수를 호출하는 것을 볼 수 있는데.
image
더블클릭해 들어가면 void APawn::PawnClientRestart() 함수에서 프로젝트 설정에 등록된 입력 컴포넌트 클래스 정보를 사용해 입력 컴포넌트 언리얼 오브젝트를 생성하고 SetupPlayerInputComponent 함수를 호출하는 것을 볼 수 있습니다.

void APawn::PawnClientRestart()
{
	Restart();

	APlayerController* PC = Cast<APlayerController>(Controller);
	if (PC && PC->IsLocalController())
	{
		// Handle camera possession
		if (PC->bAutoManageActiveCameraTarget)
		{
			PC->AutoManageActiveCameraTarget(this);
		}

		// Set up player input component, if there isn't one already.
		if (InputComponent == nullptr)
		{
			InputComponent = CreatePlayerInputComponent();
			if (InputComponent)
			{
				SetupPlayerInputComponent(InputComponent);
				InputComponent->RegisterComponent();
				if (UInputDelegateBinding::SupportsInputDelegate(GetClass()))
				{
					InputComponent->bBlockInput = bBlockInput;
					UInputDelegateBinding::BindInputDelegatesWithSubojects(this, InputComponent);
				}
			}
		}
	}
}

 

5.1버전의 경우 같은 규약을 가지지만 기능이 강화된 EnhancedInputComponent를 사용하도록 기본 설정되어 있습니다. 이를 또 설명하자면...
궁금한 만큼 소스코드를 물고 들어가면 해답을 얻을 수 있으니 한번 연습해보시기 바랍니다.

0

themoon007

아.. 프로젝트 세팅에 기본 향상된 플레이어 인풋 설정하는 것이 있네요....

이해했습니다. 감사합니다.

무한맵 제작과정중에 GetWorld 가 Nullptr 을 반환합니다.

0

42

2

12강 행동트리에서 질문이 있습니다.

0

51

1

위젯 사이즈랑 위치 질문드려요.

0

81

3

행동트리의 데코레이션 관련하여 질문이 있습니다.

0

93

3

VS 2026 의 문제일까요?

0

479

2

에셋참조 블루프린트질문

0

67

2

애님 몽타주 콤보 관련질문

0

70

2

ThirdPerson CDO 에러가 생깁니다.

0

95

3

캐릭터가 움직이지 않습니다.

0

179

4

쿠킹 폴더 지정시 , Item 이외에는 지정하지 않는지 궁금합니다.

0

62

2

TSoftObjectPtr 를 사용했음에도, 메모리에 로드 됩니다.

0

94

2

7강에 나오는 생성자에 대해서 궁금합니다.

0

78

2

6강을 마무리하며 트레이스 채널 을 이해하지 못했습니다.

0

73

2

3강을 마무리 하며, 카메라가 움직이지 않습니다.

0

70

2

Use Controller Rotation 옵션값이 궁금합니다.

0

83

2

3강 입력 시스템 적용 중, 5.6 버전은 입력 매팅이 2개 입니다.

0

64

2

PlayerController 에 대헤 제가 잘못 이해한 것 같습니다.

0

78

2

13강 UpdateStat 부분에서 문제를 겪고 있습니다.

0

63

2

BP_PlayerController의 CustomEvent노드 이유가 궁금합니다.

0

64

1

콤포넌트 포인터 선언시 TObjectPtr<>과 UStaticMeshComponent* 차이점

0

72

2

CharacterMovementComponent의 RotationRate관련해서 질문이 있습니다.

0

114

2

언리얼 공부방법에 대해 질문드립니다.

0

85

2

4강 에서 이상한 그림자가 남습니다.

0

46

1

2강에서 카메라 회전안되시는분 참고

2

89

2