유니티 카메라가 캐릭터를 따라다니도록 만드는 방법

게임에서 캐릭터를 조작할 때, 카메라가 캐릭터를 자연스럽게 따라가며 게임의 몰입도를 높이는 것은 매우 중요한 일입니다. 유니티에서는 이 기능을 간단하게 구현할 수 있는 두 가지 방법이 있습니다. 코드가 전혀 필요 없는 쉬운 방법부터, 더 부드러운 움직임을 연출할 수 있는 스크립트 활용법까지 차례대로 알려드릴게요.


방법 1: 가장 쉬운, 부모-자식 관계 이용하기

이 방법은 코딩 없이 유니티 에디터의 계층 구조만으로 카메라를 캐릭터에 종속시키는 방식입니다.

  1. 캐릭터와 카메라 준비: 씬에 플레이어 캐릭터 오브젝트와 Main Camera가 있는지 확인하세요.
  2. 계층 설정: Hierarchy 창에서 Main Camera마우스로 드래그하여 플레이어 캐릭터 오브젝트 아래로 옮겨 놓으세요. 이렇게 하면 카메라가 캐릭터의 **자식(Child)**이 됩니다.
  3. 카메라 위치 조정: 카메라의 위치(Position)와 회전(Rotation)을 직접 조절하여 캐릭터의 등 뒤나 위쪽 등 원하는 시점을 잡아줍니다.

이 상태에서 캐릭터를 움직이면, 카메라는 캐릭터를 부모로 삼아 함께 움직이고 회전합니다. 매우 간단하지만, 카메라가 캐릭터의 움직임을 그대로 반영하기 때문에 다소 딱딱하게 느껴질 수 있습니다.


방법 2: 부드러운 움직임을 위한 스크립트 활용하기

좀 더 부드럽고 영화 같은 카메라 워크를 원한다면 스크립트를 사용하는 것이 좋습니다. 이 방법은 카메라의 움직임에 ‘지연’ 효과를 주어 더욱 자연스럽게 보입니다.

  1. 스크립트 작성: SmoothFollowCamera.cs라는 이름의 스크립트를 생성하고, 아래 코드를 복사해서 붙여넣으세요.

C#

using UnityEngine;

public class SmoothFollowCamera : MonoBehaviour
{
    // 카메라가 쫓아갈 타겟(캐릭터)
    public Transform target;

    // 타겟과 카메라 간의 상대적 거리와 시점
    public Vector3 offset = new Vector3(0, 5, -10);

    // 부드러움의 정도를 조절하는 변수 (0에 가까울수록 느리게 따라갑니다)
    [Range(0.01f, 1f)]
    public float smoothFactor = 0.125f;

    // LateUpdate는 모든 오브젝트의 Update가 끝난 후에 실행됩니다.
    // 캐릭터의 움직임이 먼저 계산된 후에 카메라가 움직여야 자연스럽기 때문이죠.
    void LateUpdate()
    {
        // 타겟이 없으면 경고를 출력하고 함수를 종료합니다.
        if (target == null)
        {
            Debug.LogWarning("카메라 타겟이 설정되지 않았습니다.");
            return;
        }
        
        // 타겟의 위치에 offset을 더해 카메라의 최종 목표 위치를 계산합니다.
        Vector3 destination = target.position + offset;
        
        // 현재 위치에서 목표 위치까지 'smoothFactor' 비율로 부드럽게 이동시킵니다.
        Vector3 smoothedPosition = Vector3.Lerp(transform.position, destination, smoothFactor);
        transform.position = smoothedPosition;
    }
}
  1. 스크립트 설정:
    • SmoothFollowCamera.cs 스크립트를 **Main Camera**에 부착합니다.
    • Inspector 창에서 target 필드에 씬에 있는 플레이어 캐릭터를 드래그하여 연결해 주세요.
    • offset 값을 조절하여 카메라가 캐릭터로부터 얼마나 떨어져서 쳐다볼지 설정합니다.
    • smoothFactor 값을 변경하며 원하는 만큼의 부드러움을 찾아보세요. 값이 높을수록 카메라가 빠르게 따라붙고, 낮을수록 천천히 따라갑니다.

팁: LateUpdate()의 중요성

스크립트의 LateUpdate() 함수는 Update() 함수가 모두 실행된 후에 호출됩니다. 캐릭터의 움직임이 Update()에서 먼저 계산된 다음, 카메라가 그 움직임을 LateUpdate()에서 따라가야 자연스러운 흐름이 만들어지죠. 만약 Update() 함수에서 카메라를 움직이면, 캐릭터와 카메라가 같은 프레임에 움직여 카메라가 떨리는 것처럼 보일 수 있습니다.

이 두 가지 방법을 통해 게임의 시점에 맞는 카메라 움직임을 구현해 보세요!

댓글 남기기