Unity 기초 (3)

혀니앤·2021년 1월 29일
0

이모저모

목록 보기
7/18

캐릭터 이동 + 회전시키기

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

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

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

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


profile
일단 시작하기

0개의 댓글