Unity 기초 (3)
캐릭터 이동 + 회전시키기
(이동은 간단한데 회전을 구현하는 과정에서 문제가 많았음)
-
Quaternion.Slerp(기준점, 도착점, 속도) 를 이용해서 회전시키기
-
transform.Rotate(이동벡터)를 이용해서 회전시키기
2번의 문제점 -> Rotate는 기존 위치를 기준으로 크게 원형을 그리며 회전하는 방식(y축만 이동하고자 했을 때.)
방향만 바꾸는 것이 아니라 position 값이 같이 변경되는 문제점 발생
=> 애니메이션 효과의 경우에는 RigidBody를 사용해서 Constraints position 적용하면 문제 없을 듯(카메라 등에서 활용)
1번으로 진행하는 과정에서 발생한 문제점
회전되는 각도와 이동 방향이 일치하지 않는 문제점
=> 이동할 때 벡터의 값이, 현재 바라보고 있는 방향을 기준으로 설정되는 문제점
(같은 벡터라고 해도 왼쪽을 볼 때와 오른쪽을 볼 때의 이동 결과가 다름)
=> tranform.tranlate(이동벡터, 기준점) // 기준점을 Space.World로 설정
Vector3 moveVec;
float hAxis = Input.GetAxisRaw("Horizontal");
float vAxis = Input.GetAxisRaw("Vertical");
moveVec = new Vector3(hAxis, 0,vAxis).normalized;
//회전
transform.rotation=Quaternion.Slerp(transform.rotation,Quaternion.LookRotation(moveVec),15f);
저 한줄 추가하는데 2시간이나 걸렸다....뻘짓을 많이함
float angle = Mathf.Atan2(moveVec.x, moveVec.z) * Mathf.Rad2Deg;
회전 값 구하는 과정에서 나온 회전 각도 구하는 공식 (어떤 원리인지는 아직 이해못함)
Quaternion은 회전을 다루는 수식
(x,y,z,w)의 벡터 방식으로 표현되지만 값은 스칼라 값
캐릭터 넘어지지 않게 하기, 회전축 고정
RIgidbody에서 회전 고정, xz축을 고정시켜주면 회전 오류로 인해 넘어질 일이 없다
쓸데없이 오래걸렸던,,기본 동작 만들기 완료
이제 본격적으로 게임다운걸 만들수있게됐다
Author And Source
이 문제에 관하여(Unity 기초 (3)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jeongopo/Unity-기초-3저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)