티스토리 뷰

반응형

플레이어의 움직임에 대해 구현하던중 마우스 포지션 Y값에 따라 위아래로의 회전을 구현하였다. 실행 해본 결과 X값에 따라 왼쪽, 오른쪽 회전은 잘 작동하지만, Y값에 따른 위아래 회전이 실행되지 않았다. 

그래서 카메라 회전과 컨트롤에 대해 알아보게 되었다.

플레이어가 게임에 입장할때, 플레이어 컨트롤러와 폰을 부여받는다. 

플레이어 컨트롤러는 플레이어의 컨트롤 회전을 관리하고, 폰은 캐릭터의 물리적인 상태를 관리한다고 한다. 

언리얼 엔진에서 인풋 값에 따라 회전을 시킬때 사용하는 함수인 AddControllerYawInput을 열어 보면 플레이어 컨트롤러의 Yaw값을 조절하는것을 볼 수 있다. 그렇기 때문에 플레이어 컨트롤러의 회전값과 폰의 회전값을 연동할 것인지, 아닌지의 욥선이 중요해 지는 것이다.

void APawn::AddControllerYawInput(float Val)
{
	if (Val != 0.f && Controller && Controller->IsLocalPlayerController())
	{
		APlayerController* const PC = CastChecked<APlayerController>(Controller);
		PC->AddYawInput(Val);
	}
}

 Pawn의 Use Controller Rotation Pitch (Yaw, Roll) 값이 true로 설정되어 있으면 PlayerController의 값에 매칭되어 사용된다. 일반적으로 언리얼엔진에서 Yaw회전값이 true로 설정되어있다. 

그렇기 때문에 플레이어 컨트롤러의 값의 Yaw값이 변경되었을때는 정상으로 작동했고, Pitch값은 false이기 때문에 플레이어 컨트롤 값이 들어가지 않게 되어 회전이 실행되지 않는것처럼 보였던 것이다.

 

Spring Arm의 Camera Setting에 따라 부모에서 피치, 요, 롤 상속을 할지, 폰컨트롤 로테이션을 사용할지 결정할수 있다.

 

내가 구현하고자 했던 카메라 셋팅은 FPS게임처럼 마우스 Y위치가 위로 올라가면 카메라가 위 방향을 보고, 내려가면 아래방향으로 내려가고, X의 위치에따라 캐릭터가 회전하는것이었다.

그렇다면,

> Use Controller Rotation Yaw값은 플레이어 컨트롤러의 회전과 같아야한다.  

> Use Controller Rotation Pitch값은 플레이어 컨트롤러의 회전과 달라야 한다. 왜냐하면 플레이어 자체가 회전할것은 아니고, 카메라만 pitch회전을 할 것이기 떄문이다. 만약 이 옵션을 켜게 되면 캐릭터가 모두 플레이어 컨트롤러의 Pitch회전값을 적용받기 때문에 캐릭터가 카메라와 함께 회전하게 된다.

> Spring Arm의 Camera Setting이 폰컨트롤 로테이션을 사용하도록 셋팅 되어야한다.

위처럼 셋팅하면 카메라 셋팅이 끝났다.

반응형
댓글