[Unity] 시네머신3 알아보기 (3) - Position Control

MINO·2025년 5월 28일

2025-05-28

Cinemachine

시네머신 카메라의 가장 기본 속성인 Cinemachine Camera 의 속성들에 대해 알아보려고 한다.

지난 Sample - 2.ClearShot 에서는 3개의 자식 카메라가
각각 Rotation Composer, Follow 속성으로 이루어져 있었는데,
Position Control 과 Rotation Control 에 어떤 방식이 있는지 알아볼 것이다.



Common

먼저 알아볼 것은 Cinemachine Camera 의 공통 속성이다.

  • Cinemeachine 공통 프로퍼티

    속성설명
    Priority숫자가 클수록 우선 순위가 높아져 해당 카메라가 활성화됨
    Output Channel특정 카메라 그룹(Channel)로 라우팅하여 카메라 간 전환을 제어함 (특정 기능과 연계 가능)
    Standby Update카메라가 비활성화 상태일 때의 업데이트 방식
    - Never : 완전히 멈춤
    - Always : 항상 업데이트
    - Round Robin : 순환적으로 업데이트
    Blend Hint카메라를 전환하는 데 필요한 힌트를 제공
    여러 개를 조합할 수 있지만, 서로 충돌할 경우에는 시네머신이 임의로 선택한다.

여러 카메라가 활성화 상태일 경우, Prioirty 가 가장 높은 카메라가
최종적으로 Cinemachine Brain 을 통해 화면에 출력된다.

프로퍼티를 통해 카메라 간 전환이나 업데이트 방식 등을 상황에 맞게 설정해주자.

  • Lens 속성

    속성설명
    Vertical FOV카메라의 수직 시야각 (Field of View). 일반적으로 40~60 사이의 값 사용
    Near Clip Plane카메라가 렌더링을 시작할 최소 거리 (가까운 거리의 물체 잘림 현상 방지)
    Far Clip Plane카메라가 렌더링할 수 있는 최대 거리 (멀리 있는 물체가 이 거리 넘으면 보이지 않음)
    Dutch카메라를 좌우로 기울이는 회전 각도 (영화에서 감정 표현 등에 사용됨)
    Mode Override카메라의 Projection Mode를 강제로 설정
    └ None기본 설정 사용
    └ Perspective원근 카메라 (거리에 따라 물체의 크기가 다르게 보임, 3D)
    └ Orthographic직교 카메라 (거리와 상관 없이 항상 같은 크기로 보임, 2D)

이 부분은 최적화(렌더링 관련) 나 장면 연출에 큰 영향을 주는 부분이라서
파라미터들을 수정해보며 원하는 장면 연출을 찾으면 될 것 같다.


Position Control

이전 시네머신 버전의 Framing Transposer 이다.
위치 제어 시스템으로 훨씬 더 모듈화되어 필요한 기능을 선택할 수 있다.
Unity - Cinemachine 3 - Position Control

옵션설명사용 예시
None카메라가 어떤 대상도 따라가지 않음. 수동으로 위치 지정컷씬용 고정 시점
Follow단순히 추적 대상 (Tracking Target) 을 지속적으로 따라감.
Follow Offset, Damping 적용 가능
FPS, TPS 기본 시점
Spline Dolly미리 만든 Spline(곡선 경로)를 따라 카메라를 이동시킴레일 기반 카메라, 자동 연출
Third Person Follow추적 대상(Tracking Target)을 회전 축으로 하여,
수평 및 수직 방향으로 카메라가 회전
3인칭 액션 게임
Orbital Follow대상 주변을 회전하며 따라가는 카메라.
마우스 또는 터치로 궤도 회전 가능
캐릭터 커스터마이징 화면 등
Position Composer추적 대상과의 고정된 화면 공간 관계를 유지하며 이동2D 게임, 시네마틱 추적 등

해당 옵션을 선택하면 자동으로 관련 Cinemachine 컴포넌트가 추가된다.

Follow

카메라가 특정 Tracking Target 을 지정된 상대 위치에서 따라가는 방식이다.

⚠ A Tracking Target is required in the CinemachineCamera.
는 Cinemachine Camera 의 Tracking Target 을 설정해주지 않아서 뜬 문구이니,
Follow 할 대상 오브젝트를 추가해주자.

프로퍼티설명
Binding Mode카메라가 타겟을 따라갈 기준 좌표계를 설정
└ Lock To Target On Assign카메라가 활성화되거나 타겟이 할당될 때, 타겟의 Local 방향을 기준으로 고정.
이후, 카메라는 타겟과 함께 회전하지 않는다.
└ Lock To Target With World Up타겟의 Local 좌표계를 따르되, 기울기(Tilt) 와 롤(Roll) 을 0 으로 설정
└ Lock To Target No Roll타겟의 Local 좌표계를 사용하며, 롤(Roll) 만 무시
└ Lock To Target타겟의 Local 좌표계를 사용
대상이 회전하면 카메라도 같이 회전한다.
└ World Space오프셋을 타겟의 원점을 기준으로 한 World 좌표계로 설정
└ Lazy Follow오프셋과 댐핑을 카메라의 Local 좌표계로 해석
Position Damping카메라가 타겟을 부드럽게 따라오도록 지연 속도 설정
Follow Offset카메라가 타겟으로부터 유지할 상대 위치

연출하고자 하는 장면이나 화면 상황에 따라 Binding Mode 를 적절하게 설정해야 할 것 같다.

  • 레이싱 게임 : 차량(타겟)의 회전은 따라가고, 위아래 기울임이나 뒤집힘은 무시
    -> Lock To Target No Roll
  • 간단한 TPS 시점 : 캐릭터(타겟)이 회전하면, 카메라도 함께 회전하여 같은 방향을 유지
    -> Lock To Target


Spline Dolly

경로를 따라 움직이는 카메라를 구현하기 위한 방식이다.
Unity - Cinemachine - Spline Dolly

일반적으로 Cinemachine Camera 에서 Spline Dolly 를 설정하기 보다는
Cinemachine Dolly Camera with Spline 를 통해 사용하지만,
Position Control 에서 적용할 수 있는 옵션이라 살펴보았다.


  • 사전 준비
SplineInspector

Spline 을 생성하여 Cinemachine Spline Dolly 에 카메라가 움직일 경로를 생성해줘야 한다.
또한, Cinemachine Dolly Camera with Spline 를 생성하면,
컴포넌트에 Rotation Composer 이 부착되어 있고, Spline 오브젝트도 함께 생성된다.


  • Spline Dolly 프로퍼티
항목설명
Spline카메라가 따라갈 경로.
Position경로상의 현재 위치를 어떤 방식으로 표현할지 결정
└ Normalized0~1 사이의 비율로 표현
└ Distance경로 거리 기준으로 표현
└ Knot특정 노드(점) 기준으로 표현
Spline Offset카메라를 Spline 자체에서 떨어지게 설정.
X 는 수직, Y 는 위, Z 는 평행
Camera Rotation카메라의 회전과 위쪽을 설정하는 방법
└ DefaultCinemachine Brain 의 World Up Override 속성을 사용
└ SplineSpline의 방향을 따라 회전, Spline 의 위쪽 벡터와 접선
└ Spline No RollSpline 의 위쪽 벡터와 접선을 사용하지만, 롤(Roll)은 제거
└ Follow Target타겟의 Transform 에서 위쪽 벡터와 회전을 사용
└ Follow Target No Roll타겟의 Transform 에서 위쪽 벡터와 회전을 사용하지만, 롤(Roll)은 제거
Automatic DollySpline 을 따라 자동으로 동작할지 설정
└ None자동 이동 안 함
└ Nearest Point to TargetSpline 에서 타겟에 가장 가까운 위치에 카메라를 배치
└ Fixed Speed경로를 따라 고정된 속도로 이동
└ Randomized Dolly Speed랜덤한 속도로 Dolly 이동
Damping움직임을 부드럽게 만들기 위한 제어
└ Position Damping (X,Y,Z)위치 이동 시 축별 감쇠값.
카메라가 경로를 따라 부드럽게 이동하도록 조절
└ Angular Damping회전 감쇠값. 카메라 회전의 부드러움을 제어
값이 작을수록 더 빠르게, 클수록 더 무겁고 느리게 움직임.

정해진 경로를 따라 카메라가 이동하기 때문에 컷씬 같은 장면 연출에 유용하게 쓰일 것 같다.

  • 컷씬 : 시간이나 Timeline 과 연동해 정해진 위치에서 연출
  • 튜토리얼/가이드 카메라 : 타겟 위치에 따라 경로에서 가장 가까운 지점으로 카메라 이동
    -> Automatic Dolly 를 Nearest Point to Target 설정
  • 탈출/퍼즐 게임 : 정해진 포인트 사이를 이동할 때 장면 구성 연출


Hard Lock To Target

카메라의 위치를 타겟과 완전히 동일하게 유지하는 방식이다.
Unity - Cinemachine - Hard Lock To Target

카메라를 타겟의 위치에 고정시켜, 항상 같은 위치에서 움직이게 한다.

비교적 간단 명료한 컴포넌트가 추가된다.

  • Cinemachine Hard Lock To Target

    항목설명
    Damping위치가 목표 위치를 따라잡는 데 걸리는 시간
    Ex)0 : 동일하게 이동, 3 : 타겟의 3초 전 위치에 카메라가 존재

별도의 Position Control 을 설정하지 않는다면, 회전은 타겟과 독립적으로 설정된다.

  • 1인칭 카메라, VR 등의 게임 오브젝트 내부 카메라로 활용된다.


Third Person Follow

TPS 시점 카메라 구현에 최적화되어 있는 방식이다.
Unity - Cinemachine - Third Person Follow

타겟을 중심으로 회전하고, 지정된 거리와 높이를 유지하며 따라가는 3인칭 시점 카메라이다.

타겟과 일정한 위치와 거리에 유치하여 대상의 움직임과 회전을 추적하고,
적절한 Shoulder Offset 을 적용해 카메라가 캐리거의 어깨 너머를 바라보는 3인칭으로 구현할 수도 있다.
속성 값을 조절하여 1인칭 카메라로 사용할 수도 있다.

  • Cinemachine Third Person Follow 프로퍼티

    항목설명
    Damping카메라기 대상을 추적하는 반응 속도 (각 축 X, Y, Z 마다 적용)
    값이 작을수록 반응 속도가 빨라지고, 클수록 반응 속도가 느려짐.
    Shoulder OffsetTracking Target 기준, 카메라의 좌우/상하 오프셋
    Vertical Arm LengthTarget에서 카메라까지 수직 거리 (높이 조절)
    Camera Side카메라가 따라붙는 방향 설정 (왼쪽 어깨, 오른쪽 어깨 등)
    Camera Distance카메라와 Target 간의 거리
    Avoid Obstacles카메라가 장애물을 피할지 여부
    └ Collision Filter카메라가 충돌을 피할 오브젝트 Layer 설정
    └ Ignore Tag충돌 감지에서 무시할 Tag 설정, Ex) Player
    └ Camera Radius카메라 충돌 감지 반경
    └ Damping Into Collision오클루전(가림)을 보정하기 위해 카메라가 얼마나 빠르게 움직일지 설정
    값이 클수록 카메라가 빠르게 이동
    └ Damping From Collision충돌 해결 시스템으로 보정된 후, 카메라가 정상 위치로 얼마나 빠르게 움직일지 설정
    값이 클수록 카메라가 빠르게 이동

이름처럼 3인칭 액션 게임에 잘 활용할 수 있을 것 같다.

  • Shoulder Offset 과 Camera Distance 로 카메라와 타겟 간의 거리를 적당히 조절
  • Rotation Control 이나 다른 Extension 을 설정하여 마우스나 패드를 통해 카메라 회전 구현

Targeted Camera_ TPA(Third Person Aim Camera)

Third Person Follow 와 함께 사용되는 Third Person Aim 컴포넌트가 존재한다.
Unity - Cinemachine - Third Person Aim

이 Extension 을 사용하여 단순히 타겟을 바라보는 것이 아니라,
카메라가 플레이어 앞의 특정 거리(Aim Distance) 에 가상의 조준 지점을 만들고
그 지점을 바라보며 회전하는 방식으로 작동되게 해준다.


Targeted Camera - TPSInspector
  • Third Person Aim 프로퍼티
프로퍼티설명
Aim Collision Filter카메라 조준 시 충돌 감지를 수행할 레이어 마스크 설정
카메라 시점이 해당 레이어를 가진 객체와 겹치지 않도록 카메라 위치를 조정.
Ignore Tag충돌 감지 시 무시할 태그를 지정합니다.
Ex) Player
Aim Distance조준 대상까지의 거리를 정의
너무 가까우면 자연스럽지 않고, 너무 멀면 정확하지 않을 수 있다.
Noise Cancellation카메라의 조준 떨림을 줄여주는 기능.
보통 카메라 흔들림이나 입력에 의해 발생하는 미세한 떨림을 보정하여
보다 정확하고 안정된 조준 시점을 제공.
  • 가상의 조준 지점을 화면 중앙에 크로스 헤어로 표시하여 FPS 게임처럼 표현할 수도 있을 것 같다.


Orbital Follow

카메라가 타겟을 중심으로 공전(Orbital)하듯 회전하면서 따라가는(Follow) 방식이다.

Unity - Cinemachine - Orbital Follow

시네머신 Input Axis Controller behaviour 등을 통해 플레이어 입력에 따라
타겟을 기준으로 카메라의 위치를 동적으로 제어할 수 있다.

  • Cinemachine Orbital Follow 일반 프로퍼티

    항목설명
    Binding Mode타겟으로부터 Offset 을 해석할 때 사용할 좌표계를 설정
    └ World SpaceWorld 좌표계를 기준
    └ Lazy Follow카메라 Local 좌표계를 기준
    └ Lock to Target타겟의 Local 좌표계를 기준,
    카메라가 대상과 함께 회전
    └ Lock to Target On Assign카메라가 활성화될 때, 타겟의 Local 좌표계를 기준으로 기준,
    카메라는 대상과 함께 회전하지 않음
    └ Lock to Target No Roll타겟의 Local 좌표계를 기준, 롤(Roll) 은 0 으로 설정
    └ Lock to Target With World Up타겟의 Local 좌표계를 기준, 틸트(Tilt) 와 롤(Roll) 을 0 으로 설정
    Position Damping카메라가 얼마나 민감하게 반응하는지 설정
    값이 작을수록 반응 속도가 빠르고, 값이 클수록 반응 속도가 느려짐
    Target Offset타겟으로부터의 기본 오프셋
    Orbital Styleorbit 이 생성되는 방식
    └ Sphere카메라는 대상을 둘러싼 구 형태 어느 지점에든 위치
    └└ Radius구의 반지름
    └ Three Ring카메라는 대상을 중심으로 3개의 원형 궤도 안에 위치
    └└ Top/Center/Bottom3개의 원형 궤도의 높이와 반지름
    └└ Spline Curvature3개의 원형 궤도를 연결하는 선의 팽팽함을 정의
    Recentering Target카메라 축의 재중심화 기준
    └ Axis Target정적 참조, 동적으로 업데이트되지 않음
    └ Parent Target부모 객체의 앞쪽 뒤에 오도록 동적으로 조정
    └ Tracking Target타겟의 앞쪽 뒤에 오도록 동적으로 조정
    └ Look At Target주시 타겟의 앞쪽 뒤에 오도록 동적으로 조정

  • Cinemachine Orbital Follow 축별 프로퍼티 (Horizontal, Vertical, Radial Axis)

    항목설명
    Value현재 카메라 축의 값
    Center축의 중심값 (중립 위치)
    Range축의 유효 범위
    Recentering.Wait Time사용자가 입력을 멈춘 뒤 재중심화를 시작하기까지의 시간
    Recentering.Time재중심화가 완료되기까지 걸리는 시간

  • 레이싱 게임 : 전시되어 있는 차량을 유저의 입력을 통해서 360도 회전하며 살펴볼 수 있게 구현
  • 캐릭터 커스터마이징 화면 : 현재 꾸미고 있는 캐릭터를 360도 회전하며 관찰

그렇다면 유저의 입력(터치나 마우스 회전) 을 어떻게 입력받아야 할까?
-> Add Input Controller 를 통해 필요한 컴포넌트를 추가해주자.


Cinemachine Input Axis Controller

이 컴포넌트를 사용하여 싱글 플레이어 환경에서 마우스와 키보드 / 컨트롤러를 사용하여
쉽게 Cinemachine Camera 를 제어할 수 있다고 한다.

Unity - Cinemachine Input Axis Controller

  • Cinemachine Input Axis Controller 프로퍼티

    항목설명
    Scan Recursively자식 오브젝트까지 포함해 입력 액션을 자동으로 검색
    Suppress Input While Blending카메라 전환(블렌딩) 중에는 입력을 무시
    자연스러운 전환을 위해 사용
    Ignore Time ScaleTime.timeScale에 관계없이 입력을 받을지 여부
    Player Index멀티플레이어 환경에서 특정 플레이어의 입력을 지정
    Auto Enable Inputs활성화 시 자동으로 Input System과 연결

  • Cinemachine Input Axis Controller Driven Axes 프로퍼티

    축 종류설명
    Look Orbit X마우스나 스틱의 좌우 움직임 (Yaw, 좌우 회전)
    Look Orbit Y마우스나 스틱의 상하 움직임 (Pitch, 상하 회전)
    Orbit Scale줌인/줌아웃과 같은 축의 스케일 (거리 조절 등)

    항목설명
    Enabled해당 축의 입력을 사용할지 여부
    Input Action연결된 Input System 의 액션
    Gain입력 값에 곱해지는 민감도 계수 (Input Action 사용 시 적용)
    Legacy Input구 Input Manager에서 사용되는 축 이름 (예: "Mouse X")
    Legacy Gain구 Input Manager 용 민감도 계수
    Cancel Delta Time입력 축에서 수행되는 기본 deltaTime 보정을 취소하는 설정
    (deltaTime 곱하기를 생략하여 프레임에 무관하게 일정한 회전 속도 유지)
    Input Value현재 축의 입력 값 (디버깅 용도)
    Accel Time입력값이 변화할 때 가속에 걸리는 시간
    Decel Time입력이 멈췄을 때 감속에 걸리는 시간


Position Composer

타겟을 중심으로 일정한 스크린 비율을 유지할 때 주로 사용되는 방식이다.

Unity - Cinemachine - Position Composer

타겟을 화면의 고정된 영역(중앙, 좌측, 상단 등)에 배치하고,
그에 따라 카메라가 자동으로 움직이게 한다.

  • Cinemachine Position Composer 프로퍼티

    속성설명
    Camera Distance카메라와 타겟 사이의 거리 설정
    Dead Zone Depth카메라 Z축(깊이 방향) 상에서 타겟이 이 영역을 벗어나야만 카메라가 이동
    Screen Position타겟이 화면 내에서 위치할 비율
    Ex) (0.5, 0.5)는 화면 정중앙, (0.3, 0.7)은 왼쪽 하단
    Dead Zone타겟이 이 영역 내에서 움직일 경우, 카메라는 움직이지 않음
    Hard Limits타겟이 지정된 화면 영역을 넘지 않도록 강제로 제한
    Center on Activate카메라가 활성화될 때, 타겟을 자동으로 화면 중심으로
    Target Offset타겟 위치에 대해 오프셋
    Damping타겟을 따라갈 때 얼마나 부드럽게 움직일지
    Lookahead타겟의 이동 방향을 예측해 카메라가 앞서 움직이도록

타겟을 정중앙에 위치시킨 2D 게임이나
앞서 예시로 설명한 2.5D 게임 (리틀 나이트 메어) 등의 시점으로 화면을 연출할 수 있다.

profile
안녕하세요 게임 개발하는 MINO 입니다.

0개의 댓글