Showing

[Unreal] 언리얼 좌표계 Pitch, Roll, Yaw 이해와 짐벌락 이슈 해결 본문

Unreal

[Unreal] 언리얼 좌표계 Pitch, Roll, Yaw 이해와 짐벌락 이슈 해결

RabbitCode 2023. 10. 23. 17:06

언리얼은 좌표계에 Pitch, Roll, Yaw라는 이름을 붙인다.

Pitch(Y) : 헤더가 위로 아래로 흔들리는 회전

Roll(X) : 뒤집히면서 비행기체 전체가 도는 회전

Yaw(Z) : 헤더 시야각 좌우회전

 

마우스 좌표의 위치 방향으로 플레이어가 고개를 돌리고 총알을 쏘는 상황에서,

    FHitResult _hitResult;
	UGameplayStatics::GetPlayerController(GetWorld(), 0)->GetHitResultUnderCursor(ECC_Visibility, true, _hitResult);
	SetActorRotation(_dirRot);

마우스를 중심부의 플레이어에 올리면, 플레이어가 뒤집어지는 의도치 않은 짐벌락 버그가 발생하게 된다.

 

문제 해결 과정

아래 두가지 해결 방법이 유효하다.

(1) 

도착지와 시작점의 X, Y값만 유효한 벡터를 생성하여 FindLookAtRotation함수의 input으로 넣는다.

	FHitResult _hitResult;
	UGameplayStatics::GetPlayerController(GetWorld(), 0)->GetHitResultUnderCursor(ECC_Visibility, true, _hitResult);
	FVector Dest = FVector(_hitResult.Location.X, _hitResult.Location.Y, 0.0f);
	FVector Start = FVector(this->GetActorLocation().X, this->GetActorLocation().Y, 0.0f);
	FRotator _dirRot = UKismetMathLibrary::FindLookAtRotation(Start,
		Dest);
	SetActorRotation(_dirRot);

(2)

FindLookAtRotation의 아웃풋 벡터에서 yaw만 유효한 파이널벡터를 만든다.

	FHitResult _hitResult;
	UGameplayStatics::GetPlayerController(GetWorld(), 0)->GetHitResultUnderCursor(ECC_Visibility, true, _hitResult);
	FRotator _dirRot = UKismetMathLibrary::FindLookAtRotation(this->GetActorLocation(),_hitResult.Location);
	FRotator _finalRot = FRotator(0, _dirRot.Yaw, 0);
	SetActorRotation(_dirRot);