상세 컨텐츠

본문 제목

회전에서 Quaternion.Slerp(), Quaternion.RotateTowards()의 차이

유니티/기능

by MJ_119 2024. 7. 24. 14:30

본문

Quaternion.Slerp

Quaternion.Slerp는 구면 선형 보간(Spherical Linear Interpolation)을 사용하여 두 쿼터니언 사이를 일정한 비율로 회전합니다. 회전의 진행률은 t 매개변수에 의해 결정됩니다. 이 메서드는 일정한 속도로 회전하는 느낌을 주며, 특히 큰 각도 차이를 부드럽게 회전할 때 유용합니다.

 

transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, rotationSpeed * Time.deltaTime);

 

주요 특징:

  • 구면 선형 보간: 두 회전 사이의 가장 짧은 경로를 따라 회전합니다.
  • 속도 일정: rotationSpeed에 따라 회전 속도가 일정하게 느껴집니다.
  • 비율 기반: rotationSpeed * Time.deltaTime 값이 0에서 1 사이의 비율로 사용됩니다.

Quaternion.RotateTowards

Quaternion.RotateTowards는 현재 회전에서 목표 회전까지 일정한 각도로 회전합니다. 이 메서드는 일정한 각도 속도로 회전하므로, 큰 각도 차이를 회전할 때 회전 속도가 느려지는 느낌이 들지 않습니다.

 

transform.rotation = Quaternion.RotateTowards(transform.rotation, targetRotation, rotationSpeed * Time.deltaTime);

 

주요 특징:

  • 선형 회전: 두 회전 사이의 경로를 따라 일정한 각도로 회전합니다.
  • 속도 일정: 각도 속도가 일정하게 유지됩니다.
  • 각도 기반: rotationSpeed * Time.deltaTime 값이 각도로 사용됩니다.

비교 요약

  • 경로:
    • Slerp: 구면 선형 보간을 사용하여 두 쿼터니언 사이의 가장 짧은 경로를 따라 회전합니다.
    • RotateTowards: 두 쿼터니언 사이의 선형 경로를 따라 일정한 각도로 회전합니다.
  • 속도:
    • Slerp: 비율 기반으로 회전하며, 회전 속도가 느린 각도 차이에 비례합니다.
    • RotateTowards: 각도 기반으로 회전하며, 회전 속도가 일정합니다.
  • 사용 상황:
    • Slerp: 부드럽게 회전할 때 사용합니다. 예를 들어, 카메라가 천천히 목표를 따라갈 때.
    • RotateTowards: 특정 시간 내에 일정한 각도로 회전할 때 사용합니다. 예를 들어, 정확한 타이밍으로 회전이 필요한 경우.

 

@ 예시코드

using UnityEngine;

public class RotationExample : MonoBehaviour
{
    public Transform target;
    public float rotationSpeed = 90f; // 각도 속도 (degrees per second)

    void Update()
    {
        if (target != null)
        {
            // 목표 회전 계산
            Quaternion targetRotation = Quaternion.LookRotation(target.position - transform.position);

            // Slerp 사용
            transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, rotationSpeed * Time.deltaTime);

            // RotateTowards 사용
            // transform.rotation = Quaternion.RotateTowards(transform.rotation, targetRotation, rotationSpeed * Time.deltaTime);
        }
    }
}

관련글 더보기