유니티에서 큐브 오브젝트의 회전을 제어하려면 먼저 큐브 오브젝트를 씬에 생성해야 한다. 이렇게 하려면:
큐브 오브젝트가 생성되면 회전을 조정할 수 있다. 이를 위해 SetRotation.cs
스크립트를 작성하고 큐브에 적용하자.
using UnityEngine;
public class SetRotation : MonoBehaviour
{
void Start()
{
transform.rotation = Quaternion.Euler(60, 60, 60); // x, y, z 축에 대해 60도씩 회전
}
}
SetRotation.cs
를 저장한다.SetRotation
스크립트를 추가한다.이제 큐브는 게임이 시작될 때 x, y, z 축을 중심으로 각각 60도 회전한다.
유니티에서 회전을 제어하려면 종종 Vector3 값을 쿼터니언으로 변환해야 할 수 있다. 이렇게 하려면 Quaternion.Euler
메서드를 사용하면 된다.
Vector3 rotationVector = new Vector3(60, 60, 60); // 각 축을 중심으로 60도 회전
Quaternion.Euler
메서드를 사용하여 Vector3 값을 쿼터니언으로 변환한다. 이 메서드는 Vector3 값을 입력으로 받아 해당 각도로 회전하는 쿼터니언을 반환한다.Quaternion quaternion = Quaternion.Euler(rotationVector);
transform.rotation = quaternion;
이렇게 하면 Vector3 값을 사용하여 오브젝트를 원하는 각도로 정확하게 회전시킬 수 있다.
쿼터니언과 오일러 각은 3D 공간에서 회전을 나타내는 두 가지 방법이다.
오일러 각은 3D 공간에서 회전을 표현하는 가장 직관적인 방법이다. x, y, z 축을 중심으로 각각 회전할 각도를 나타낸다.
Vector3 eulerRotation = new Vector3(60, 60, 60); // x, y, z 축에 대해 60도씩 회전
쿼터니언은 복소수 확장으로, 3D 회전을 나타내기 위해 널리 사용된다. 쿼터니언은 4개의 부분으로 구성되며, 각 부분은 회전의 다른 측면을 나타낸다.
Quaternion quaternionRotation = Quaternion.Euler(60, 60, 60);
쿼터니언은 오일러 각보다 안정적이며, 복잡한 회전을 표현할 때 주로 사용된다.
오일러 각은 간단하고 직관적이지만, "짐벌락"이라는 문제가 있다. 짐벌락은 두 회전 축이 정렬되어 하나의 자유도를 잃는 현상이다. 이로 인해 예기치 않은 회전이 발생할 수 있다.
예를 들어, 비행기가 거의 수직으로 올라갈 때, 특정 축을 중심으로 회전하는 능력을 잃을 수 있다. 이 문제는 쿼터니언을 사용함으로써 해결할 수 있다.
쿼터니언은 w, x, y, z의 네 가지 부분으로 구성된다.
Quaternion quaternion = new Quaternion(w, x, y, z);
쿼터니언은 짐벌락 문제를 피할 수 있으며, 복잡한 3D 회전을 효과적으로 처리한다. 유니티에서는 Quaternion
클래스를 사용하여 쿼터니언 회전을 쉽게 관리할 수 있다.
Quaternion rotation = Quaternion.Euler(60, 60, 60); // 오일러 각을 쿼터니언으로 변환
쿼터니언은 선형 보간, 정규화 등 고급 회전 제어 기능을 제공하며, 복잡한 3D 애니메이션과 상호작용을 구현하는 데 필수적이다.
유니티에서는 여러 Quaternion
함수를 제공하여 회전을 쉽게 제어할 수 있다.
오일러 각을 쿼터니언으로 변환한다.
Quaternion rotation = Quaternion.Euler(45, 30, 60);
방향을 향한 회전을 생성한다. 예를 들어, 오브젝트가 특정 타겟을 향하게 하려면 이 함수를 사용할 수 있다.
Vector3 targetDirection = target.position - transform.position;
Quaternion rotation = Quaternion.LookRotation(targetDirection);
두 쿼터니언 사이를 선형 보간한다. 부드러운 회전 효과를 만들 때 사용된다.
Quaternion rotation = Quaternion.Lerp(from, to, Time.deltaTime * speed);
쿼터니언은 회전을 나타내기 때문에, 단순히 더하면 안 된다. 올바른 방법은 쿼터니언을 곱하는 것이다.
두 회전을 합치려면 쿼터니언을 곱해야 한다.
Quaternion combinedRotation = rotation1 * rotation2;
이 방법은 두 회전을 순차적으로 적용하는 것과 동일하다. 첫 번째 회전이 적용된 후 두 번째 회전이 적용된다.
유니티에서 회전을 적용할 때, Local 또는 Global 좌표계를 기준으로 할 수 있다.
transform.localRotation
을 사용하여 부모 오브젝트에 대한 상대적인 회전을 설정한다.transform.rotation
을 사용하여 전역 좌표계에 대한 절대 회전을 설정한다.transform.rotation *= Quaternion.Euler(0, 45, 0); // Global 회전
transform.localRotation *= Quaternion.Euler(0, 45, 0); // Local 회전