Unity

유니티 Quaternion 사용법

우대비 2025. 3. 5. 17:57
반응형

Quaternion이란? 🤔

유니티에서 Quaternion은 3D 오브젝트의 회전을 나타내기 위해 사용되는 수학적 구조입니다. Quaternion은 네 개의 요소로 구성되며, 이는 하나의 실수 부분과 세 개의 가상 수 부분으로 이루어져 있습니다. 이 구조는 3D 공간에서 객체를 회전시킬 때 발생할 수 있는 여러 문제점들을 해결해주는 매우 효율적인 방법을 제공합니다.


Quaternion 사용 예시 💡

1. 오브젝트 회전
유니티에서 Quaternion은 가장 기본적으로 오브젝트의 회전을 처리하기 위해 사용됩니다. 예를 들어, Quaternion.Euler(x, y, z) 함수는 x, y, z 축을 중심으로 한 오일러 각도를 Quaternion으로 변환합니다. 이를 통해 게임 개발자는 오브젝트를 손쉽게 회전시킬 수 있습니다.

using UnityEngine;

public class RotateObject : MonoBehaviour
{
    void Start()
    {
        // 회전을 원하는 오일러 각도
        float x = 30.0f;
        float y = 45.0f;
        float z = 60.0f;

        // 오일러 각도를 Quaternion으로 변환
        Quaternion rotation = Quaternion.Euler(x, y, z);

        // 오브젝트의 회전 설정
        transform.rotation = rotation;
    }
}

 

 

2. 특정 방향으로 회전시키기

오브젝트를 특정 방향으로 회전시키기 위해 Quaternion.LookRotation을 사용할 수 있습니다. 이 함수는 주어진 방향을 바라보도록 오브젝트를 회전시킵니다.

using UnityEngine;

public class LookAtTarget : MonoBehaviour
{
    public Transform target;

    void Update()
    {
        // 타겟 방향 계산
        Vector3 direction = target.position - transform.position;

        // 타겟 방향을 바라보도록 회전 설정
        Quaternion rotation = Quaternion.LookRotation(direction);

        // 오브젝트의 회전 적용
        transform.rotation = rotation;
        
        // 현재 회전값에 Quaternion을 곱하면 그만큼 회전한 값이 나옵니다.
        transform.rotation = transform.rotation * rotation;
    }
}

 

 

 

 

3.회전 축을 기준으로 회전하기
특정 축을 기준으로 오브젝트를 회전시키기 위해 Quaternion.AngleAxis를 사용할 수 있습니다. 이 함수는 주어진 축을 중심으로 특정 각도로 회전하는 Quaternion을 생성합니다.

using UnityEngine;

public class RotateAroundAxis : MonoBehaviour
{
    void Start()
    {
    	// 플레이어가 몬스터를 바라보게 만들고싶다면?
        Vector3 dir = 플레이어-> 몬스터 방향벡터;
        Vector3 forward = 플레이어의 forward 벡터;
        
        // 회전 축 생성
        Vector3 axis = Vector3.Cross(dir, forward);
        axis.Normalize();
        
        // 회전 각도 계산 (내적)
        float dotProduct = Vector3.Dot(dir, forward);
        float angle = Mathf.Acos(dotProduct) * Mathf.Rad2Deg;
        
        // 축을 기준으로 회전 설정
        Quaternion rotation = Quaternion.AngleAxis(angle, axis);
        // 오브젝트의 회전 적용
        transform.rotation = rotation;

    }
}

 

 

자주 사용되는 함수 📗

1.Quaternion.Euler
이 함수는 오일러 각도를 Quaternion으로 변환합니다. 오일러 각도는 x, y, z 축을 중심으로 한 회전 각도를 의미합니다.

Quaternion rotation = Quaternion.Euler(30, 45, 60);

 

 

2.Quaternion.AngleAxis
이 함수는 특정 축을 중심으로 주어진 각도로 회전하는 Quaternion을 생성합니다.

Quaternion rotation = Quaternion.AngleAxis(45, Vector3.up);

 

 

3.Quaternion.LookRotation
이 함수는 주어진 방향을 바라보도록 회전하는 Quaternion을 생성합니다. 주로 오브젝트가 특정 방향을 바라보게 할 때 사용됩니다.

Vector3 direction = target.position - transform.position;
Quaternion rotation = Quaternion.LookRotation(direction);

 

 

4.Quaternion.Lerp
이 함수는 두 Quaternion 간의 선형 보간(Linear Interpolation)을 수행합니다. 두 회전 상태 간의 부드러운 전환을 위해 사용됩니다.

Quaternion rotation = Quaternion.Lerp(startRotation, endRotation, t);

 

 

5.Quaternion.Slerp
이 함수는 두 Quaternion 간의 구면 선형 보간(Spherical Linear Interpolation)을 수행합니다. Lerp보다 더 자연스러운 회전 전환을 제공합니다.

Quaternion rotation = Quaternion.Slerp(startRotation, endRotation, t);

 

 

6.Quaternion.Inverse
이 함수는 주어진 Quaternion의 역(반대) 회전을 반환합니다. 주로 회전을 되돌리거나 취소할 때 사용됩니다.

Quaternion inverseRotation = Quaternion.Inverse(rotation);

 

 

7.Quaternion.Dot
이 함수는 두 Quaternion 간의 내적(Dot Product)을 계산합니다. 두 회전 간의 유사도를 측정할 때 사용됩니다.

float dotProduct = Quaternion.Dot(rotationA, rotationB);
반응형
LIST