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 |