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);
'Unity' 카테고리의 다른 글
Line Renderer를 활용한 움직이는 플랫폼 구현 (0) | 2025.03.06 |
---|---|
유니티 StartCoroutine의 반환 시점 (0) | 2025.03.06 |
Unity 3D TPS 카메라 컨트롤러 구현 (0) | 2025.03.05 |
유니티 무한 로딩 오류 (0) | 2025.02.20 |
유니티 대화 시스템 구현 (0) | 2025.02.19 |