Unity 기초 (3)

1756 단어 UnityUnity

캐릭터 이동 + 회전시키기

(이동은 간단한데 회전을 구현하는 과정에서 문제가 많았음)

  1. Quaternion.Slerp(기준점, 도착점, 속도) 를 이용해서 회전시키기

  2. 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축을 고정시켜주면 회전 오류로 인해 넘어질 일이 없다

쓸데없이 오래걸렸던,,기본 동작 만들기 완료

이제 본격적으로 게임다운걸 만들수있게됐다


좋은 웹페이지 즐겨찾기