// Reset the world rotation transform.rotation = Quaternion.identity;
Quaternion value = Quaternion.LookRotation( target.position );
이값은 rotation 객체에 넣게 되면, 변환 파이프라인에서 자동으로
해당 방향으로 회전을 처리하게 된다.
transform.rotation = Quaternion.Euler( x, y, z);
해당 각으로 회전한다. 오일러 회전처럼 축이 변화하지 않으므로, 동일한 값은 update 루틴에 넣어두어도 동일한 회전으로 유지된다. (오일러 회전은 계속 변화함.)
위의 방향과 x,y,z 회전을 합치려면?
그냥 곱셈 하면 된다.
하늘에 떠 있는 카메라를 원점인 (0,0,0)을 기준으로 회전시킨다고 생각하면.. 오일러 회전에서 RotateAround() 를 사용할 수 있다.
이를 쿼터니온으로 처리하려면 아래와 같은 과정을 거친다. (이해를 위해서 설명한다)
- 기준점과의 거리 저장
float distance = Vector3.Distance( A, B ); or (A-B).magnitude;
- 로컬좌표계의 카메라(GameObject)를 회전하기 위한 쿼터니언 생성
Quaternion quat = Quaternion.Euler( new Vector3( 30.0f, 0, 0 ); // x축을 기준으로 30도 회전시킬경우
- 해당 쿼터니언을 rotation으로 지정
transform.rotation = quat;
- 카메라의 위치를 기준점으로 위치
transform.position = Vector3.zero; // 해당 기준점.
- 전방을 나타내는 Vector3.forward 벡터를 위의 쿼터니언으로 회전시키고, 해당 축을 기준으로 뒤로 distance 만큼 이동
transform.position -= quat * Vector3.forward * distance;
대강 이렇게 이루어진다.
여기서 해당 쿼터니언을 transform.rotation 에 지정하지 않고, 이동 처리한 뒤에 해당 기준점을 바라보게 하면 동일한 효과가 나타난다.
transform.LookAt( Vector3.zero );
오일러 각(Euler角, Euler angle)은 강체가 놓인 방향을 3차원 공간에 표시하기 위해 레온하르트 오일러가 도입한 세 개의 각도이다.즉, 3차원 회전군 SO(3)의 한 좌표계다. 3차원 공간에 놓인 강체의 방향은 오일러 각도를 사용하여 세 번의 회전을 통해 얻을 수 있다.
// A rotation 30 degrees around the y-axis var rotation = Quaternion.Euler(Vector3(0, 30, 0));