Quick Reference
Cinemachine 3.1.7 기준입니다. 실제 Camera가 붙은 GameObject에는 CinemachineBrain, 장면별 구도에는 CinemachineCamera를 둡니다. Brain이 priority와 channel을 보고 live 카메라를 고른 뒤, 실제 Unity Camera에 최종 위치·회전·Lens를 적용합니다.
Unity Camera + CinemachineBrain
<- live CinemachineCamera의 상태를 선택·blend
CinemachineCamera
<- Tracking Target, Position Control, Rotation Control, Lens를 선언| 바꾸려는 결과 | 먼저 볼 곳 | 핵심 경계 |
|---|---|---|
| 플레이어를 따라가는 구도 | CinemachineCamera의 Tracking Target·Position/Rotation Control | Main Camera Transform을 직접 움직이지 않음 |
| 탐색에서 전투 구도로 전환 | Camera Priority, Output Channel, Brain의 Channel Mask | 같은 channel에서 높은 priority가 선택됨 |
| 전환 속도·곡선 변경 | Brain Default Blend, 필요 시 Custom Blends | Timeline이 카메라를 제어하면 priority보다 Timeline 제어가 우선 |
| 물리 대상에서 떨림 감소 | Brain Update Method와 대상 이동 루프 | Target과 Brain의 update 시점을 맞춤 |
Brain 설정
CinemachineBrain은 보통 실제 Unity Camera에 하나만 둡니다. 여러 Brain을 쓸 때는 분할 화면이나 별도 출력처럼 각 Brain이 담당할 Camera와 channel을 명확히 나눕니다.
| Inspector 항목 | 기본 의미 | 언제 바꾸는가 | 잘못 설정하면 |
|---|---|---|---|
Channel Mask | 이 Brain이 후보로 볼 CinemachineCamera의 Output Channel 필터 | split screen, 미니맵, 별도 카메라 출력 | Camera가 있어도 이 Brain에서 live가 되지 않음 |
Update Method | Camera 상태를 계산하는 시점. Smart Update가 기본 권장 | 대상이 모두 물리 루프에서 움직이면 Fixed Update, 직접 제어하면 Manual Update | target 이동 뒤에 계산되어 흔들리거나 한 프레임 늦음 |
Blend Update Method | blend 결과를 적용할 시점. 보통 Late Update | Update Method가 Fixed이고 blend jitter가 확인될 때 | 위치 계산과 blend 적용 타이밍이 갈라져 떨림 |
Default Blend | 개별 규칙이 없을 때 사용하는 transition 곡선과 길이 | 전환의 기본 연출을 통일할 때 | 의도하지 않은 Cut 또는 지나치게 긴 전환 |
Custom Blends | A Camera에서 B Camera로 갈 때만 덮어쓸 blend | 특정 컷신, 전투 진입처럼 예외가 분명할 때 | 이름·대상 Camera가 달라 규칙이 적용되지 않음 |
Ignore Time Scale | timeScale과 별개로 Brain의 카메라 갱신을 진행 | pause 중에도 메뉴·관찰 카메라를 움직일 때 | 게임은 멈췄는데 카메라만 움직이거나 반대 상황 발생 |
Manual Update를 선택하면 Brain은 자동 갱신하지 않습니다. target을 모두 갱신한 뒤 brain.ManualUpdate()를 호출하는 코드가 필요합니다. 호출을 빼먹으면 Camera 설정을 바꿔도 화면이 갱신되지 않습니다.
Camera 설정과 선택
CinemachineCamera는 3.x의 기본 카메라 컴포넌트입니다. 2.x 자료의 CinemachineVirtualCamera, Body, Aim이라는 이름을 그대로 찾으면 Inspector가 맞지 않을 수 있습니다. 3.x Inspector에서는 주로 Position Control, Rotation Control로 나뉩니다.
| Inspector 항목 | 기본 의미 | 언제 바꾸는가 | 주의할 점 |
|---|---|---|---|
Tracking Target | Follow·Look At에 공통으로 쓸 대상 | 한 대상만 추적하는 기본 구도 | 모듈별 Follow/Look At를 따로 지정했다면 이 값만 바꿔도 모두 바뀌지는 않음 |
Position Control | 카메라 위치를 만드는 모듈. CinemachineFollow, ThirdPersonFollow 등이 대표적 | 3인칭·탑다운·고정 구도에 맞춰 선택 | 위치 모듈 없이 Follow 대상만 넣으면 기대한 거리·offset이 생기지 않을 수 있음 |
Rotation Control | 시선과 화면 구도를 만드는 모듈. RotationComposer, HardLookAt 등 | 대상의 화면 위치와 시선을 정할 때 | 위치 모듈과 별개이므로 방향이 고정된 것처럼 보일 수 있음 |
Lens | FOV, Orthographic 여부·Size, near/far clip 등 실제 Camera에 적용할 렌즈 값 | 2D/3D, 줌, 컷신별 시야 변경 | 실제 Camera Lens를 동시에 애니메이션하면 마지막 작성자가 충돌 |
Priority | 같은 channel 후보 중 우선 선택되는 값. 기본 0, 높은 값이 우선 | 탐색·전투·대화 카메라를 상태로 선택할 때 | 동점에서는 활성화 순서 같은 우연한 상태에 기대지 말고 명시적으로 차이를 둠 |
Output Channel | 어느 Brain이 이 Camera를 후보로 볼지 정함 | 여러 Brain을 분리할 때 | Brain의 Channel Mask와 교집합이 없으면 선택 불가 |
Standby Update | live가 아닐 때 Camera 상태를 갱신할지 결정 | 전환 직후 구도가 즉시 맞아야 하거나 비용을 줄일 때 | Never에서는 standby 중 target 변화가 다음 live 전환까지 반영되지 않을 수 있음 |
Timeline의 Cinemachine Track이 카메라를 제어하는 동안에는 일반적인 Brain priority 선택이 연출의 기준이 아닙니다. 컷신에서 priority 값을 바꿔도 기대한 전환이 안 되면 Timeline clip과 track binding을 먼저 확인합니다.
스크립트 연결
대상을 바꾸는 코드는 Camera의 추적 대상만 바꾸고, 실제 화면 Transform은 Brain에 맡깁니다. 현재 어떤 Camera가 live인지 판단해야 한다면 CinemachineBrain.ActiveVirtualCamera 같은 Brain 상태를 읽어 디버그 UI나 게임 규칙에 연결하되, Camera 선택 자체를 장면의 우연한 활성 순서에 맡기지 않습니다.
using Unity.Cinemachine;
using UnityEngine;
public sealed class CameraTargetSwitcher : MonoBehaviour
{
[SerializeField] private CinemachineCamera playerCamera;
public void Follow(Transform target)
{
playerCamera.Follow = target;
playerCamera.LookAt = target;
}
public void MakePriorityCamera()
{
playerCamera.Prioritize();
}
}Follow와 LookAt은 모듈이 사용하는 target의 기본 소스입니다. Camera에 특정 모듈이 Follow만 쓰거나 Look At만 쓰면 나머지 필드는 화면을 바꾸지 않을 수 있습니다. Prioritize()는 다른 후보보다 이 Camera를 우선하도록 요청하지만, Output Channel 불일치나 Timeline 제어를 무시하지는 않습니다.
자주 틀리는 부분
| 증상 | 원인 | 수정 |
|---|---|---|
| 카메라가 코드와 싸우듯 튐 | Camera.main.transform과 Cinemachine이 동시에 위치·회전을 씀 | 실제 Camera Transform의 직접 제어를 제거하고 Camera 모듈 설정으로 이동 |
| Camera가 live가 되지 않음 | channel 교집합 없음, 더 높은 priority 후보, Camera 비활성 | Brain Channel Mask·Camera Output Channel·priority·활성 상태 확인 |
| 전환이 Cut처럼 보임 | Default/Custom Blend가 Cut이거나 rule 미적용 | Brain의 해당 pair blend와 Camera 이름·대상을 확인 |
| target이 물리 이동에서 떨림 | Rigidbody는 FixedUpdate, Brain은 맞지 않는 시점에 계산 | Smart Update부터 확인하고 target 이동 소유자·interpolation을 함께 조정 |
| 컷신 중 priority 변경이 무시됨 | Timeline Cinemachine Track이 Camera를 구동 | Timeline clip·binding·blend 설정에서 전환을 설계 |
참고 링크
3 sources