본문 바로가기

Programming/Unity3D

RPG만들기 1-2 이동관련

앞에서 봤던 이동을 좀더 자연스럽게 만들어보겠습니다.

Rigidbody를 사용하면 약간의 문제가 생깁니다.

쉽게 올라가야될부분도 스피드가 약하면 못올라가거나 절벽에서 떨어질때 어색함을 나타냅니다.

언덕도 쉽게 못올라가는 Player..

떨어지는게 무서운 Player

그리고 위에서 보듯 Point 를 다른곳으로 찍을때 Player가 쳐다보는 방향이 휙휙...돌아버린다.

이러한점을 자연스럽게하기위해 Rotate와 Gravity를 직접 구현해 보겠습니다.

먼저 Gamemanager에 거리 측정을 위한 distance를 하나 만들어줍니다.

그리고 Targer이란것도 하나 만들어주겠습니다.

단순 Point로 이동을 하면 차후 NPC나 Item을 클릭할때 문제가 발생할수있으니 Target이란걸 하나 만들어주겠습니다.

시작할때 Target = point로 해줍니다.

그리고 거리는 Targer과 Player의 거리를 측정해줍니다.

우선 회전값을 만들어 줍니다.

Player와 Target의 거리가 0.3이상일때만 이동 이랑 회전함수를 실행시켜주는 조건으로..

먼저 각 오브젝트간 좌표 차를 구해준다음.

Quaternion 을 통하여 회전 을 시켜주면 됩니다.

먼저 LookRotation 으로 회전할곳을 정해줍니다.

Vecter3.up이라고 함은 Y 축을 사용하겠다는것입니다.

여기에 보시면 UP 은 0,1,0입니다.

LookRotation 안에는 비교 좌표를 넣어주면 됩니다.

그냥 커터니언을 생성해주는것입니다.

Quaternion.Slerp 을 사용해보겠습니다.

msdn을 찾아보면.이렇게 나와있습니다.

시작할 회전 좌표, 끝낼 회전 좌표, 시간에 따른 변화값..쉽게보면 회전 속도겠죠.

시작할 회전 좌표는 당연히 transform의 rotation이겠고 마무리 지을 회전 좌표는 위에서 구한LookRotation이겠죠.

회전 스피드는 입맛이따라 골라쓰시면 됩니다.

이제 돌려보겠습니다.

돌리기위해 Slerp에서 구한 eulerAngles을 사용하겠습니다.

Y.축만 회전하면 되기때문에 X,Z축은 고정시키겠습니다.

그리고 자기 자신을 Quaternion.Euler로 회전시키시면 됮니다.

 

정리~

회전할곳과 자기자신의 좌표를 이용하여 각도를 구한다음 자기자신의 rotation값을 바꾼다...끝~~

Quaternion정리

Quaternion.Lookrotation(Vecter3방향);

해당 방향으로 Quaternion생성

 

float Quaternion.Angle(Quaternion rotation, Quaternion Rotation);

두 커터니언간의 각도

 

Quaternion.Euler(Vecter3 오일러각);

오일러각에 해당하는 Quaternion 생성

 

Quaternion.Slerp(Quaternion, Quaternion, float time);

시간에 따른 변화값

 

Quaternion,formToRotation(Vecter3 from, Vecter3 to);

특정 방향에서 다른 방향으로 Quaternion

 

Quaternion,Identity();

로테이션 없음

 

이렇게 됨.~~~

'Programming > Unity3D' 카테고리의 다른 글

카메라 자연스럽게 움직이기.  (0) 2015.02.27
RPG만들기 1-3 이동관련  (0) 2015.02.26
RPG만들기 1-1 이동관련  (0) 2015.02.26
메모리 풀 클래스 만들어보기.  (0) 2015.02.24
FindChild 간단 설명  (0) 2015.02.16