인프런 커뮤니티 질문&답변

유정룡님의 프로필 이미지
유정룡

작성한 질문수

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

8강 아이템 시스템

GetController() 의 NULL

작성

·

38

·

수정됨

0

왜 인지는 모르겠지만, 8강을 시작하면서
밑에 있는 코드의 GetController()에서 NULL을 반환하고 있어 게임 플레이가 안되던 문제가 있었습니다.

void AABCharacterPlayer::SetCharacterControl(ECharacterControlType NewCharacterControlType)
{
	UABCharacterControlData* NewCharacterControl = CharacterControlManager[NewCharacterControlType];
	check(NewCharacterControl);

	SetCharacterControlData(NewCharacterControl);

	APlayerController* PlayerController = CastChecked<APlayerController>(GetWorld()->GetFirstPlayerController());
	if (UEnhancedInputLocalPlayerSubsystem* Subsystem = ULocalPlayer::GetSubsystem<UEnhancedInputLocalPlayerSubsystem>(PlayerController->GetLocalPlayer()))
	{
		Subsystem->ClearAllMappings();
		UInputMappingContext* NewMappingContext = NewCharacterControl->InputMappingContext;
		if (NewMappingContext)
		{
			Subsystem->AddMappingContext(NewMappingContext, 0);
		}
	}

	CurrentCharacterControlType = NewCharacterControlType;
}

아직 Pawn이 컨트롤러를 얻은 시점이 아니라서 NULL 값으로 반환된다고 합니다.

 

GetWorld()->GetFirstPlayerController()를 호출해서 컨트롤러를 반환할수 있던데, Pawn이 컨트롤러를 얻은 시점이 언제인가요?

답변 1

0

이득우님의 프로필 이미지
이득우
지식공유자

컨트롤러가 Pawn을 빙의하는 시점은 OnPossess이고, 이 함수에서 폰의 PossessedBy를 호출해서 빙의되는 시점을 폰에게 알려줍니다. 즉 질문에 대한 답은 PossessedBy함수를 사용하시면 됩니다.
그런데 SetCharacterControl 함수는 BeginPlay에서 호출되지 않나요? 싱글플레이라면 일반적으로 컨트롤러와 폰 셋업이 다 끝난상황인데 널이 나온다면 게임 설정이나 시작지점이 잘못되어 빙의가 안된게 아닌가 싶습니다.

void APlayerController::OnPossess(APawn* PawnToPossess)
{
	if ( PawnToPossess != NULL && 
		(PlayerState == NULL || !PlayerState->IsOnlyASpectator()) )
	{
		const bool bNewPawn = (GetPawn() != PawnToPossess);

		if (GetPawn() && bNewPawn)
		{
			UnPossess();
		}

		if (PawnToPossess->Controller != NULL)
		{
			PawnToPossess->Controller->UnPossess();
		}

		PawnToPossess->PossessedBy(this);
                ....
}

 

유정룡님의 프로필 이미지
유정룡
질문자

언리얼의 플레이 모드가 Simulate로 돼있어서 생긴 이슈였습니다!
Selected Viewport로 변경하니 잘 나옵니다 감사합니다!

이득우님의 프로필 이미지
이득우
지식공유자

아, 그런 경우도 있겠군요

유정룡님의 프로필 이미지
유정룡

작성한 질문수

질문하기