• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

PlayerMovement (3/4) 질문입니다.

20.03.10 20:20 작성 조회수 98

0

public void Rotate() 

{

     var targetRotation = followCam.transform.eulerAngles.y;

     transform.eulerAngles = Vector3.up * targetRotation;

}

에서 캠의 y에 대한 회전값을 가져와서

<0, 캠y회전값, 0> 오일러각으로

현재 플레이어의 회전 상태를 설정하잖아요?

그럼 만일 게임 도중에 뭐 폭발물에 의한다든가 이것저것

부가 기능을 넣어서 플레이어 캐릭터의 x나 z에 대한 회전값을

조작하는 경우가 있었다고 한다면

그럼에도 저 스크립트대로 둔다면,

플레이어 캐릭터가 x나 z 방향으로 기울어진 상태에서

플레이어가 마우스를 살짝 움직여주면

갑자기 바로 서 버려서 <0, 캠y회전값, 0>으로 

오일러각이 설정돼 버리는 거 아닌가요??

궁금합니다!

답변 1

답변을 작성해보세요.

0

그렇습니다. 만약 그렇게 되는 것을 원하지 않는다면 바로 값을 할당하는게 아니라, 적용할 회전 값과 기존 플레이어 캐릭터 회전 값 사이에 쿼터니언 곱을 사용해야 합니다.

다만 조작 체계상, 플레이어 캐릭터는 항상 y축에 대해서만 회전값이 적용되도록 하는게 자연스럽긴하죠.

그런 경우에는 플레이어의 회전값은 x,z가 0이지만, 래그돌이 반영된 (자식게임오브젝트) 랜더용 모델 게임 오브젝트가 별개로 물리 효과에 의해 흔들리도록 해줍니다.