본문 바로가기

Unity/구현

[Unity 유니티] 3D 카메라 부드럽게 이동하기 - Vector3.SmoothDamp

Unity에서 카메라를 부드럽게 이동하려면 Vector3.SmoothDamp를 사용하는 것이 좋다.

이 함수는 시작점에서 목표 지점까지의 이동을 부드럽게 보간해준다. 카메라 이동이나 객체 추적 시 매우 유용하다.


Vector3.SmoothDamp란?

SmoothDamp는 일정 속도로 목표 위치에 도달하도록 값을 점진적으로 변화시키는 함수다.

Vector3 SmoothDamp(
    Vector3 current,        // 현재 위치
    Vector3 target,         // 목표 위치
    ref Vector3 currentVelocity, // 현재 속도 (참조값으로 전달)
    float smoothTime,       // 부드러움 시간
    float maxSpeed = Mathf.Infinity, // 최대 속도 (선택)
    float deltaTime = Time.deltaTime // 시간 간격 (선택)
)

간단한 사용 예제

아래 코드는 플레이어를 따라다니는 카메라에 SmoothDamp를 적용한 예제다.

using UnityEngine;

public class SmoothCameraFollow : MonoBehaviour
{
    public Transform player; // 따라갈 플레이어
    public float smoothTime = 0.3f; // 이동 부드러움 시간

    private Vector3 currentVelocity; // 속도 저장 변수

    void LateUpdate()
    {
        if (player == null) return;

        Vector3 targetPosition = player.position + new Vector3(0, 5, -10); // 카메라 위치 오프셋
        transform.position = Vector3.SmoothDamp(
            transform.position, 
            targetPosition, 
            ref currentVelocity, 
            smoothTime
        );
    }
}

코드 설명

  1. 목표 위치 설정: 플레이어의 위치에 오프셋을 더해 목표 위치를 계산한다.
  2. Vector3.SmoothDamp 사용: 현재 위치에서 목표 위치로 부드럽게 이동한다.
  3. 속도 변수 관리: currentVelocity는 내부적으로 계산되며 다음 프레임에서도 지속적으로 사용된다.

위 코드를 적용하면 카메라가 플레이어를 부드럽게 따라다니는 효과를 얻을 수 있다. smoothTime 값을 조정하여 움직임의 부드러움을 쉽게 조절할 수 있다.


Vector3.SmoothDamp는 카메라 이동뿐만 아니라 다양한 물체의 부드러운 움직임에도 활용할 수 있는 강력한 도구다.

코드에 적용해보면 간편하면서도 자연스러운 움직임을 구현할 수 있다.