본문 바로가기

Programming/Unity - Reference

[Unity C# Reference] Quternion


1. Quternion

[메모] 쿼터니언의 증가는 곱셈으로 이루어진다 (덧셈이 아니다)

[메모2] 쿼터니언의 증가를 위해 곱셈을 할 경우 반드시 Global Space기준으로 해야함. 그게 아니면

Local 기준으로 회전하기 때문에 정확한 수치가 나오지 않는다.


Quternion.Euler : 오일러 각에 의한 쿼터니언 로테이션 생성. 

Quternion.Euler ( Vector3  좌표)


Quternion.Euler(new Vector3(10,20,20));


Quternion.LookRotation : 설정한 방향으로 해당 오브젝트를 돌린다(해당 방향으로 쳐다보게 만든다.3차원 좌표계에서 "앞쪽"은 Z축이므로, 해당 방형으로 오브젝트의 Z축을 정렬시킨다)

Quternion.LookRotation( Vector3 좌표)


Quternion.LookRotation(new Vector3(0,1,0));   <- 0.1.0방향으로 오브젝트를 회전시킨다.


//상대방 오브젝트의 방향으로 쳐다보게 만들때


public Transform target_pos;  //상대방의 포지션

Vector3 direction = target_pos - transform.position; //상대방위치 - 자신위치 : 자신기준 상대방의 방향

transform.rotation = Quternion.LookRotation(direction);



Quternion.Lerp : 두 개의 회전값의 특정 구간값을 가지고 온다

Quternion.Lerp (좌표A , 좌표B, 구간(0~1f))


Quternion aRot = Quternion.Euler(new Vector3(30,0,0));

Quternion bRot = Quternion.Euler(new Vector3(60,0,0));


Quternion targetRot = Quternion.Lerp(aRot,bRot,0.5f);  // aRot와 bRot사이의 0.5f(50%)구간값을 리턴.


//상대방의 방향으로 자연스럽게 돌아보는 법

//이걸 업데이트에 넣는다. 그러면 매 Tick마다  현재 자기 좌표 -> 목표 좌표의 50%위치까지 자신을 회전시키고, 다음 틱에서 (이전틱에서 50% 회전한)자신의 좌표와 -> 목표 좌표의 50%까지 자신을 회전시키길 반복한다 -> 처음엔 빨리 돌다가 목표가 다가올수록 천천히 돈다

//단 이경우, 절대 목표좌표까지 도달할 수 없기 때문에 적당히 보정해줘야함.


if(transform.rotation < (0.99*target_rot)){ //보정해줌. 99퍼까지 왔으면 정지.

Quternion target_rot = Quternion.Euler(new Vector3 (10,20,30));

transform.rotation = Quternion.Lerp(transform.rotation , target_rot ,0.5f);

}



'Programming > Unity - Reference' 카테고리의 다른 글

[Unity C# Reference] Interface Class  (0) 2018.06.11
[Unity C# Reference] Physics.Raycast  (0) 2018.06.11
[Unity C# Reference] Transform  (0) 2018.06.11
[Unity C# Reference] CoRoutine  (0) 2018.06.10
[Unity C# Reference] List  (0) 2018.06.10