헷갈리는 오브젝트 회전 방법 Part 2 (Lerp, Slerp, RotateTowards)

2023. 11. 22. 10:55·Unity
반응형

Quaternion.Lerp()

Quaternion.Lerp() 메서드는 두 쿼터니언 사이의 선형 보간을 수행합니다. 이는 두 점 사이를 직선으로 연결하는 것과 유사합니다. 이 방법은 보간 속도가 일정하기 때문에 빠르지만, 이러한 선형 보간은 짧은 거리에서는 잘 작동하지만 긴 거리에서는 비현실적으로 보일 수 있습니다.

Quaternion.Lerp() 메서드의 구문은 다음과 같습니다.

Quaternion.Lerp(Quaternion from, Quaternion to, float t);
// from 시작 쿼터니언
// to 목표 쿼터니언
// t 보간 비율 0 - 1

Quaternion.Lerp() 메서드는 다음과 같이 작동합니다.

  1. 시작 쿼터니언과 종료 쿼터니언의 차이를 구합니다.
  2. 차이를 보간 비율 (t)만큼 곱합니다.
  3. 결과를 시작 쿼터니언에 더합니다.

Quaternion.Lerp() 메서드는 부드럽게 회전하기 위해 사용할 수 있습니다. 예를 들어, 다음과 같이 코드를 작성하면 원래 쿼터니언에서 타겟 쿼터니언으로 부드럽게 회전할 수 있습니다.

Quaternion rotation = Quaternion.Lerp(originalRotation, targetRotation, Time.deltaTime);

 

Quaternion.Slerp()

Quaternion.Slerp() 메서드는 두 쿼터니언 사이를 구형으로 보간합니다. 이는 보간이 두 점 사이의 가장 짧은 경로를 따르도록 보장하므로, 보간이 자연스럽게 보이는 효과가 있습니다. 하지만 이 방법은 계산이 복잡해서 Lerp보다 느릴 수 있습니다.

Quaternion.Slerp(Quaternion from, Quaternion to, float t);
// from 시작 쿼터니언
// to 목표 쿼터니언 
// t 보간 비율 0 -1

 

Quaternion.Slerp() 메서드는 다음과 같이 작동합니다.

  1. 시작 쿼터니언과 종료 쿼터니언의 차이를 구합니다.
  2. 차이를 로그 스플라인 함수로 변환합니다.
  3. 변환된 차이를 보간 비율 (t)만큼 곱합니다.
  4. 결과를 로그 스플라인 함수로 역변환합니다.
  5. 결과를 시작 쿼터니언에 더합니다.

Quaternion.RotateTowards()

이전 포스팅에서 설명한 부분은 생략하겠습니다.

 

Quaternion.RotateTowards() 메서드는 다음과 같이 작동합니다.

  1. 시작 쿼터니언과 종료 쿼터니언의 차이를 구합니다.
  2. 차이의 크기가 maxAngle보다 작으면, 종료 쿼터니언을 반환합니다.
  3. 차이의 크기가 maxAngle보다 크면, 다음과 같은 과정을 반복합니다.
  4. 생성된 쿼터니언을 반환합니다.

Quaternion.RotateTowards() 메서드는 두 회전 사이를 보간하면서 한 프레임당 최대 각도를 지정할 수 있습니다. 이는 회전 속도를 제한하는 데 유용합니다. 예를 들어, 공이 플레이어를 바라보도록 회전하게 하고 싶지만, 공이 즉시 회전하는 것을 원하지 않는 경우에 사용할 수 있습니다.

 

각 메서드의 특징 

메서드 특징
Lerp 빠른 속도  
Slerp Lerp보다 느린 속도 회전이 부드러움
RotateTowards 가장 빠른 속도  회전 속도 제한 가능

 

어떤 메서드를 사용해야 할까요?

어떤 메서드를 사용할지는 게임의 특성에 따라 다릅니다.

  • 회전이 부드럽게 이루어져야 하는 경우 Quaternion.Slerp() 메서드를 사용합니다.
  • 회전이 부드럽지 않아도 되는 경우 Quaternion.Lerp() 메서드나 Quaternion.RotateTowards() 메서드를 사용합니다.
  • 속도가 중요한 경우 Quaternion.RotateTowards() 메서드를 사용합니다.

예를 들어, 캐릭터가 부드럽게 회전해야 하는 경우에는 Quaternion.Slerp() 메서드를 사용합니다. 반면, 캐릭터가 빠르게 회전해야 하는 경우에는 Quaternion.RotateTowards() 메서드를 사용합니다.

저작자표시 비영리 변경금지 (새창열림)

'Unity' 카테고리의 다른 글

간단하게 오브젝트 간의 각도 구하는 방법  (0) 2023.11.24
Vector3 : Lerp, SmoothDamp, MoveTowards 비교  (0) 2023.11.23
시야 범위에 타켓 오브젝트가 들어와 있는지 확인하는 방법  (0) 2023.11.21
C# 프로젝트 파일이 열리지 않을 때 (VSCode)  (0) 2023.11.21
헷갈리는 오브젝트 회전 방법 Part 1 (LookRotation, LookAt, RotateTowards)  (1) 2023.11.20
'Unity' 카테고리의 다른 글
  • 간단하게 오브젝트 간의 각도 구하는 방법
  • Vector3 : Lerp, SmoothDamp, MoveTowards 비교
  • 시야 범위에 타켓 오브젝트가 들어와 있는지 확인하는 방법
  • C# 프로젝트 파일이 열리지 않을 때 (VSCode)
코샵
코샵
나의 코딩 일기장
    반응형
  • 코샵
    끄적끄적 코딩 공방
    코샵
    • 분류 전체보기 (725)
      • 스마트팜 (0)
      • 상품 추천 (223)
      • MongoDB (4)
      • 하드웨어 (17)
      • 일기장 (4)
      • 파이썬 (130)
        • Basic (41)
        • OpenCV (8)
        • Pandas (15)
        • PyQT (3)
        • SBC(Single Board Computer) (1)
        • 크롤링 (14)
        • Fast API (29)
        • Package (6)
      • Unity (138)
        • Tip (41)
        • Project (1)
        • Design Pattern (8)
        • Firebase (6)
        • Asset (2)
      • Linux (4)
      • C# (97)
        • Algorithm (11)
        • Window (7)
      • TypeScript (51)
        • CSS (10)
      • Git (11)
      • SQL (5)
      • Flutter (10)
        • Tip (1)
      • System (1)
      • BaekJoon (6)
      • Portfolio (2)
      • MacOS (1)
      • 유틸리티 (1)
      • 서비스 (6)
      • 자동화 (3)
      • Hobby (10)
        • 물생활 (10)
        • 식집사 (0)
  • 인기 글

  • 태그

    카페24리뷰이관
    셀레니움
    긴유통기한우유
    스크립트 실행 순서
    codingtips
    파이썬
    쇼핑몰리뷰
    상품 리뷰 크롤링
    codingcommunity
    Python
    카페24리뷰
    rtsp
    리스트
    유니티
    ipcamera
    programming101
    스크립트 실행
    리뷰관리
    unity
    리뷰이관
    스마트스토어리뷰
    appdevelopment
    믈레코비타멸균우유
    cv2
    devlife
    라떼우유
    list
    programmerlife
    learntocode
    C#
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코샵
헷갈리는 오브젝트 회전 방법 Part 2 (Lerp, Slerp, RotateTowards)
상단으로

티스토리툴바