회전을 주는 3가지 방법

1. 오일러각

2. 쿼터니언(사원수)

3.방향벡터

 

오일러각(Euler)는 x,y,z축의 각각의 호전으로 표현하는 방식이다.

2D -  z축으로 회전, x, y축에서 이동

3D - x/y/z축으로 회전, x, y, z축에서 이동

 

문제점 : 짐벌락 - https://www.youtube.com/watch?v=yxMQKsab5TQ&t=321s

 

쿼터니언(Quaternion)은 w, x, y, z의 네 가지 수로 회전을 표현하는 방식이다.

게임 엔진에서는 주로 쿼터니언을 활용하여 회전하지만 매우 비직관적이기 때문에 개발자들은 오일러각을

쿼터니언으로 바꾸는 방식을 활용하고, 이러한 메소드를 제공한다.

 

Quaternion.Identity - 회전이 없다.

Quaternion.Euler - 오일러각을 '쿼터니언'으로 변환하는 방식

transform.eulerAngles - 오일러각을 '회전'에 직접 반영하는 방식

 

문제점 : 우리가 생각하는 어떤 특정한 회전을 적용하는 수많은 쿼터니언이 있다.

쿼터니언의 값을 직접 변경해주는 방법은 사용하면 안된다.

 

방향 벡터는 특정한 방향을 바라보게 하거나, 특정한 방향과 축을 맞출 때 활용한다.

예시 - LookRotation

public class ExampleClass : MonoBehaviour
{
    public Transform target;

    void Update()
    {
        Vector3 relativePos = target.position - transform.position;

        // the second argument, upwards, defaults to Vector3.up
        Quaternion rotation = Quaternion.LookRotation(relativePos, Vector3.up);
        transform.rotation = rotation;
    }
}

 

예시 - FromToRotation(벡터의 정렬)

rb.velocity = transform.forward * speed.z;
Ray ray = new Ray(transform.position, transform.forward);
Physics.Raycast(transform.position, transform.forward, out RaycastHit hit, 1f);
if (hit.collider != null)
{
    Instantiate(Effect, hit.point, Quaternion.FromToRotation(Vector3.up, hit.normal));
    Destroy(gameObject);
}

 

Lerp (선형보간)

Mathf.Lerp(float 초기값, float 목표값, float 비율);

 

Slerp (구형보간)

Quaternion.Slerp(Quaternion From, quaternion To, float 비율);

반응형