Unity에서 오브젝트를 회전하는 방법에는 여러 가지가 있습니다. 그 중에서도 가장 일반적인 방법은 쿼터니언을 사용하는 것입니다. 쿼터니언은 3차원 회전을 표현하는 데 사용되는 4차원 벡터입니다.
Unity에서 쿼터니언을 사용하여 오브젝트를 회전하는 방법은 다음과 같습니다.
- 먼저, Quaternion.LookRotation() 또는 transform.LookAt() 메서드를 사용하여 회전할 값인 쿼터니언 값을 구합니다.
- 그런 다음, Transform.rotation 속성을 사용하여 오브젝트의 회전 쿼터니언을 설정합니다.
transform.LookAt() 메서드
transform.LookAt() 메서드는 오브젝트를 지정된 위치와 방향으로 회전합니다.
public void LookAt(Transform target);
public void LookAt(Vector3 worldPosition, [DefaultValue("Vector3.up")] Vector3 worldUp);
public void LookAt(Vector3 worldPosition);
여기서 target은 바라볼 오브젝트, worldPosition은 오브젝트가 바라보게 될 위치, worldUp 오브젝트가 회전할 기준점입니다.
다음은 transform.LookAt() 메서드를 사용하여 오브젝트를 지정된 위치와 방향으로 회전하는 예입니다.
public void Rotation()
{
// 오브젝트를 지정된 위치와 방향으로 회전합니다.
transform.LookAt(target.transform);
}
Quaternion.LookRotation() 메서드
Quaternion.LookRotation() 메서드는 지정된 방향을 가리키는 쿼터니언을 생성합니다.
public static Quaternion LookRotation(Vector3 forward);
public static Quaternion LookRotation(Vector3 forward, [DefaultValue("Vector3.up")] Vector3 upwards);
여기서 forward는 지정된 방향을 나타내는 Vector3입니다.
다음은 Quaternion.LookRotation() 메서드를 사용하여 오브젝트를 지정된 방향으로 회전하는 예입니다.
public void Rotation()
{
Vector3 direction = (target.transform.position - transform.position).normalized;
// 타켓을 향한 방향 벡터를 계산합니다.
Quaternion rotation = Quaternion.LookRotation(direction);
// 지정된 방향을 가리키는 쿼터니언을 생성합니다.
transform.rotation = rotation;
// 오브젝트를 지정된 방향으로 회전합니다.
}
두 메서드의 차이점
transform.LookAt() 메서드와 Quaternion.LookRotation() 메서드의 차이점은 다음과 같습니다.
- transform.LookAt() 메서드는 오브젝트를 직접 회전하는 반면, Quaternion.LookRotation() 메서드는 회전할 쿼터니언을 생성하는 것입니다.
- transform.LookAt() 메서드는 오브젝트의 위치와 방향을 함께 지정해야 하지만, Quaternion.LookRotation() 메서드는 방향만 지정하면 됩니다. 두 메서드의 방향 기본값은 Vector Up입니다.
RotateTowards() 메서드
RotateTowards() 메서드는 현재 쿼터니언과 목표 쿼터니언을 향해 회전하는 쿼터니언을 생성합니다.
public static Quaternion RotateTowards(Quaternion from, Quaternion to, float maxDegreesDelta)
여기서 from은 현재 쿼터니언, to는 목표 쿼터니언, maxDegreesDelta는 회전 속도를 나타내는 값입니다.
다음은 RotateTowards() 메서드를 사용하여 오브젝트를 목표 쿼터니언으로 회전하는 예입니다.
private void Update()
{
Vector3 direction = (target.transform.position - transform.position).normalized;
Quaternion rotation = Quaternion.LookRotation(direction);
Quaternion rotateValue = Quaternion.RotateTowards(transform.rotation, rotation, 60.0f * Time.deltaTime);
trasform.rotation = rotateValue;
}
LookAt과 LookRotation 메서드와는 다르게 즉시 회전하는 것이 아닌 일정한 속도로 회전합니다.
Time.deltaTime 옆의 상수값 (60.0f)를 조절하여 회전속도를 조절할 수 있습니다.
아래 사진은 위 예제를 실행 시킨 모습입니다.
'Unity' 카테고리의 다른 글
시야 범위에 타켓 오브젝트가 들어와 있는지 확인하는 방법 (0) | 2023.11.21 |
---|---|
C# 프로젝트 파일이 열리지 않을 때 (VSCode) (0) | 2023.11.21 |
Unity에서 Google AdMob을 사용하는 방법 (0) | 2023.11.07 |
Unity의 WaitUntil 코루틴 (0) | 2023.10.25 |
Unity에서 유연한 인스턴스 생성 (0) | 2023.10.16 |