게임에서 캐릭터를 조작할 때, 카메라가 캐릭터를 자연스럽게 따라가며 게임의 몰입도를 높이는 것은 매우 중요한 일입니다. 유니티에서는 이 기능을 간단하게 구현할 수 있는 두 가지 방법이 있습니다. 코드가 전혀 필요 없는 쉬운 방법부터, 더 부드러운 움직임을 연출할 수 있는 스크립트 활용법까지 차례대로 알려드릴게요.
방법 1: 가장 쉬운, 부모-자식 관계 이용하기
이 방법은 코딩 없이 유니티 에디터의 계층 구조만으로 카메라를 캐릭터에 종속시키는 방식입니다.
- 캐릭터와 카메라 준비: 씬에 플레이어 캐릭터 오브젝트와
Main Camera
가 있는지 확인하세요. - 계층 설정:
Hierarchy
창에서Main Camera
를 마우스로 드래그하여 플레이어 캐릭터 오브젝트 아래로 옮겨 놓으세요. 이렇게 하면 카메라가 캐릭터의 **자식(Child)**이 됩니다. - 카메라 위치 조정: 카메라의 위치(Position)와 회전(Rotation)을 직접 조절하여 캐릭터의 등 뒤나 위쪽 등 원하는 시점을 잡아줍니다.
이 상태에서 캐릭터를 움직이면, 카메라는 캐릭터를 부모로 삼아 함께 움직이고 회전합니다. 매우 간단하지만, 카메라가 캐릭터의 움직임을 그대로 반영하기 때문에 다소 딱딱하게 느껴질 수 있습니다.
방법 2: 부드러운 움직임을 위한 스크립트 활용하기
좀 더 부드럽고 영화 같은 카메라 워크를 원한다면 스크립트를 사용하는 것이 좋습니다. 이 방법은 카메라의 움직임에 ‘지연’ 효과를 주어 더욱 자연스럽게 보입니다.
- 스크립트 작성:
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;
}
}
- 스크립트 설정:
SmoothFollowCamera.cs
스크립트를 **Main Camera
**에 부착합니다.Inspector
창에서target
필드에 씬에 있는 플레이어 캐릭터를 드래그하여 연결해 주세요.offset
값을 조절하여 카메라가 캐릭터로부터 얼마나 떨어져서 쳐다볼지 설정합니다.smoothFactor
값을 변경하며 원하는 만큼의 부드러움을 찾아보세요. 값이 높을수록 카메라가 빠르게 따라붙고, 낮을수록 천천히 따라갑니다.
팁: LateUpdate()
의 중요성
스크립트의 LateUpdate()
함수는 Update()
함수가 모두 실행된 후에 호출됩니다. 캐릭터의 움직임이 Update()
에서 먼저 계산된 다음, 카메라가 그 움직임을 LateUpdate()
에서 따라가야 자연스러운 흐름이 만들어지죠. 만약 Update()
함수에서 카메라를 움직이면, 캐릭터와 카메라가 같은 프레임에 움직여 카메라가 떨리는 것처럼 보일 수 있습니다.
이 두 가지 방법을 통해 게임의 시점에 맞는 카메라 움직임을 구현해 보세요!