Menu
CoddyTech

부드럽게 회전하기

Coddy Unity 여정의 물리와 게임플레이 섹션에 포함된 레슨. 71개 중 45번째.

transform.rotation을 새 회전으로 바로 설정하면 오브젝트가 한 프레임 만에 회전합니다. Quaternion.RotateTowards(current, goal, maxDegrees)는 current를 goal 방향으로 최대 maxDegrees만큼 회전한 결과를 반환하며, 목표를 지나치지 않습니다. 단계로 turnSpeed * Time.deltaTime을 사용하면 오브젝트가 일정한 속도로 회전하다가 목표 지점에서 정확히 멈춥니다. 위치에 적용되는 MoveTowards와 같습니다. 이 해바라기는 초당 30도씩 태양을 따라갑니다.

public Transform sun;
public float turnSpeed = 30f;

void Update()
{
    Quaternion goal = Quaternion.LookRotation(sun.position - transform.position);
    transform.rotation = Quaternion.RotateTowards(transform.rotation, goal, turnSpeed * Time.deltaTime);
}

태양이 90도 떨어져 있으면 해바라기가 회전하는 데 3초가 걸리며, 매초 30도씩 회전합니다. 해바라기는 가장 짧은 방향으로 회전하고, 목표 방향은 매 프레임 다시 계산되므로 움직이는 태양도 따라갑니다.

Quaternion.Slerp(a, b, t)는 Vector3.Lerp가 점에 적용되는 것처럼 a에서 b까지의 경로 중 t만큼 회전한 결과입니다. Update()에서 Slerp(transform.rotation, goal, 5f * Time.deltaTime)로 작성하면 매 프레임 남은 각도의 일부만큼 회전합니다. 처음에는 빠르게 회전하고 목표에 가까워질수록 점점 느려져, 정해진 속도로 회전하지 않으며 목표에 완전히 도달하지도 않습니다. 이런 부드러운 감속은 카메라나 머리를 돌릴 때 적합합니다. 대포가 초당 60도 회전하는 것처럼 회전 속도가 게임 규칙인 경우에는 RotateTowards를 사용하세요.

challenge icon

챌린지

중급

각 화살표가 가리키는 방향으로 올빼미가 부드럽게 회전하도록 하세요.

  1. Quaternion goal;을 추가하고 Start()에서 transform.rotation으로 설정하세요.
  2. 각 화살표의 Input.GetKeyDown에서 goal을 설정하세요. 예를 들어 goal = Quaternion.LookRotation(Vector3.right);와 같이 설정합니다. 위쪽은 +z, 오른쪽은 +x, 아래쪽은 -z, 왼쪽은 -x입니다.
  3. 매 프레임 transform.rotation = Quaternion.RotateTowards(transform.rotation, goal, turnSpeed * Time.deltaTime);을 설정하세요.

‘플레이’를 누르고 화살표를 탭하세요. 그런 다음 ‘확인’을 누르세요.

직접 해보기

using UnityEngine;

public class Owl : MonoBehaviour
{
    public float turnSpeed = 180f;

    void Update()
    {
        // 위, 오른쪽, 아래, 왼쪽: turnSpeed의 초당 회전 각도에 따라 각각 +z, +x, -z, -x 방향을 향하도록 회전합니다.
    }
}

물리와 게임플레이의 모든 레슨

직접 연습해 보세요: Unity 플레이그라운드