unity에서 방향전환을 위해 transform.rotation
에 접근 해보자
당연히 Vector3
type일 줄 알았던 rotation이 Quaternion
type이다.
unity에서는 방향을 제어할 때 Vector3를 이용하거나 Quaternion을 이용할 수 있다.
transform
엔 rotation
말고 eulerAngles
라는 프로퍼티가 있는데 Vector3로 방향을 전환할 수 있게 해준다.
void Update()
{
_yAngle = Time.deltaTime * 100.0f;
transform.eulerAngles = new Vector3(0,_yAngle,0);
}
transform.eulerAngles에 더하거나 빼는 연산을 하면 degreerk 360을 넘는 오류가 발생할수 있어 _yAngle 값을 증가시켜줘야 한다.
void Update()
{
_yAngle = Time.deltaTime * 100.0f;
transform.Rotate(new Vector3(0,_yAngle,0));
}
아니면 Rotate()함수를 이용하면 된다.
Quaternion
type은 3D오브젝트의 회전시 발생하는 짐벌록 현상을 막기 위해 사용한다고만 알아두자.
void Update()
{
_yAngle = Time.deltaTime * 100.0f;
transform.rotation += Quaternion.Euler(new Vector3(0,_yAngle,0));
}
rotation이 Quaternion
type이기 때문에 바로 += 해주면 된다. 대신 eulerAngle값을 quaternion으로 바뀌주는 Quaternion.Euler()
사용해주자
void Update()
{
_yAngle = Time.deltaTime * 100.0f;
transform.rotation += Quaternion.Euler(new Vector3(0,_yAngle,0));
}
Quaternion
에 있는 LookRotation()
은 원하는 방향벡터를 넣어주면 해당하는 Quaternion
을 생성해준다.
void Update()
{
transform.rotation = Quaternion.LookRotation(Vector3.forward);
}
방향을 바꿀때 바로 바뀌지 않고 천천히 방향을 바꾸고 싶을때 Slerp()
사용하면 된다.
void Update()
{
transform.rotation = Quaternion.Slerp(Quaternion.LookRotation(Vector3.forward), 0.2f);
}
2번째 파라미터로 속도 조절가능