본문 바로가기

▶Programming/Unity

Quaternion

Position에 대입하려면 vector를 사용하듯 rotation에 대입하려면 Quaternion을 사용한다. 
쉽게 String a=b(b가 String이어야 하는건 코딩 상식!)
Position이나 Rotation도 마찬가지.
Transform.position=new Vector()
Transform.rotation=Quaternion a 

그냥 변수 타입이라 생각하고 이해하면 꽤 명쾌!


ransform.rotation에는 단순히 오브젝트의 회전"값"에 대한것이고 transform.Rotate가 +=의 개념이 들어 있어 update함수같은 곳에 넣어주면 회전하게 되는 것이다. 지금 오브젝트의 x,y,z의 회전값=transform.rotation


1줄 요약: 오브젝트를 원하는 x,y,z로 회전할거면 rotation  x,y,z씩 회전할거면 Rotate


transform.Rotate(0,30,0) == (transform.rotation=Quaternion.Eular(0,30,0)) 

위의 코드 언듯 보기엔 같아 보이나 같지 않다.


transform.rotation=Quaternion.Eular(0,30,0) 을 하면 옆에 보이는 Rotation에 x,y,z가 0,30,0이 된다. 따라서 만약에 이 트랜트폼이 붙어있는 캐릭터의 회전값(지금 현재 인스펙터 창에 보이는 값)을 얻고 싶다면 

transform.eulerAngles 을 이용하면 된다.

transform.Rotate(0,30,0)은 위에서도 설명했듯이 '더하기'의 개념이다. 따라서 transform.Rotate(0,30,0)을 하면 옆에 보이는 인스펙트창의 트랜스폼이 0,30,0이 되는게 아니라 30+0,3.69999+30,0.65429+0 이 된다.


Eular는 파라미터로 들어온 벡터의 오일러 값을 쿼터니언으로 바꿔주는 함수이다.


Quaternion.Euler(x: float , y: float, z: float) :오일러는 절대각도를 의미.

 파라미터로 들어온 벡터의 오일러 값을 쿼터니언으로 바꿔주는 함수이다. 파라미터는 주로 벡터나 실수.

쿼터니언의 요소로 x,y,z,w가 있는데 w는 모르겠음. 게임 만들 때 그닥 중요한 아닌듯..

Euler(벡터도 가능)는 말 그대로 파라미터 만큼 회전을 의미.

이걸 transform.rotation에 대입하면 그 각도로 transform컴퍼넌트의 rotation이 변하는 것을 알 수 있다.


Quaternion.LookRotation(벡터값) : 벡터값을 넣으면 그 벡터 방향!!!!에 대한 회전 값 생성


ex)     Vector3 relativePos = target.position - transform.position;//자기자신에서 타겟을 바라보는 벡터 생성

        Quaternion rotation = Quaternion.LookRotation(relativePos);//그 벡터에 대한 회전 값 생성해서 대입

        transform.rotation = rotation;//회전값에 따라 자신의 rotation변화시킴.


위의 코드 이해 못했다면 trasform부터 다시 공부할 것!

Quaternion.identity : 회전 없음 이걸 유니티에서 print해본 결과, 값이 (0,0,0,1)이 나옴.

즉, 아무 회전 없음을 나타낼 때 사용.



Quaternion.Angle(Quaternion A, Quaternion B) : A와 B의 각도 return 값은 float


Quaternion.Slerp(Quaternion A, Quaternion B, float Time): 시간 T에 따른 From A To B로의 회전값. 

사실 A에서 B든 B에서 A든 방향은 중요하지 않기때문에 순서 상관없음. 순서 바뀌어도 같은 회전을 한다.


Quaternion.FromToRotation(Vector3 A, Vector3 B): A에서 B로 회전할 수 있게 해주는 쿼터니언 생성