✍️ 개요
시네머신을 본격적으로 사용하기 전에 동작 원리부터 알아야겠죠?
오늘은 시네머신이 어떤 원리로 인해 카메라가 스크립트 없이 동작할 수 있는지 살펴보겠습니다.
※ 시네머신 패키지가 준비가 되지 않으신 분들은 아래 링크를 참고하세요!
https://gus6615.tistory.com/110
📌 시네머신 등장 배경
만약 여러분이 3D 게임을 개발한다고 가정해봅시다.
다양한 연출을 위해 N개의 카메라를 씬에 배치하여 필요한 순간에 수동으로 끄거나 킵니다.
또한 특정 타이밍에 카메라의 위치, 회전, 설정을 조정해야 합니다.
흠... 생각만해도 복잡한 코드와 관리가 필요해보이죠?
그래서 등장한 것이 시네머신(Cinemachine) 입니다!
📌 시네머신 아키텍처
먼저 시네머신의 아키텍처를 살펴보겠습니다.
- Unity Camera : 씬을 이미지로 캡처하는 단일 카메라
- Cinemachine Brain : 특정 시네머신 카메라를 활성화하는 중추
- Cinemachine Camera : 유니티 카메라를 제어하는 컨트롤러
흐름을 살펴본다면, (유니티 카메라를 제어하는) N개의 시네머신 카메라를 배치합니다.
시네머신 브레인을 통해 원하는 타이밍에 하나의 시네머신 카메라를 작동시킵니다.
작동한 시네머신 카메라는 실제 카메라를 제어합니다.
지금부터 시네머신 브레인과 시네머신 카메라 컴포넌트에 대해 살펴보도록 하겠습니다.
📌 시네머신 브레인
시네머신 브레인은 여러 시네머신 카메라를 관리하는 중추적인 역할을 합니다.
그래서 여러분은 여러 개의 시네머신 카메라 중에서 원하는 순간에 하나를 선택하여 유니티 카메라를 제어할 수 있는 것이죠!
일반적으로 씬에 단일 메인 카메라를 사용하고, 이 카메라에 하나의 시네머신 브레인을 추가합니다.
[ 시네머신 브레인 컴포넌트 필드 분석 ]
- Live Camera : 현재 활성화된 시네머신 카메라
- 기능 : 현재 메인 카메라을 제어하는 시네머신 카메라를 실시간으로 확인 가능
- Live Blend : 현재 활성화된 시네머신 카메라 간의 전환 상태
- 기능 : 두 개의 시네머신 카메라 사이의 전환이 어떻게 이루어지는지 확인 가능
- Show Debug Text : 디버그 정보 화면 출력 여부
- 기능 : 디버깅 정보를 게임 뷰를 통해 확인 가능
- Show Camera Frsutum : 씬 뷰에 뷰 영역을 표시할지에 대한 여부
- 기능 : 시네머신 카메라의 시야 영역과 렌즈 설정을 시각적으로 확인
- Ignore Time Scale : Time.timeScale 영향을 무시할지에 대한 여부
- 기능 : 슬로우 모션이나 일시 정지 상태에서도 시네머신 브레인이 정상 작동
- 주로 컷씬 연출 시 사용
- World Up Override : 카메라의 월드 업(Vector3.up) 방향을 재정의
- 기능 : 특정 축을 기준으로 카메라의 회전 방향을 제어
- 주로 비행기 게임에서 XZ 평면 기준으로 Up Vector 고정
- Channel Mask : 시네머신 브레인이 응답할 카메라 채널을 선택
- 특정 채널에만 반응하도록 설정하여 다중 카메라 혹은 멀티플레이 환경에서 독립적인 카메라 작업 수행
- Update Method : 시네머신 브레인이 시네머신 카메라를 업데이트 타이밍 결정
- Fixed Update : 물리 연산과 함께 업데이트
- Late Update : 렌더링 직전에 업데이트
- Manual Update : 스크립트로 직접 업데이트 정의
- Blend Update Method : 시네머신 카메라 간 블렌딩 업데이트 타이밍 결정
- Fixed Update : 물리 연산과 함께 업데이트
- Late Update : 렌더링 직전에 업데이트
- Manual Update : 스크립트로 직접 업데이트 정의
- Lens Mode Override : 시네머신 카메라의 FOV, Near Clip, Far Clip 등을 재정의
- Default Blend : 기본 블렌딩 방식 설정
- Cut : 즉각적인 반응
- Ease In/Out : 부드럽게 시작하고 종료하는 전환
- Linear : 일정한 속도로 전환
- Custom Blends : 특정 블렌딩 방식을 정의
빨간 영역은 주로 많이 사용하는 역할을 표시한 영역입니다.
📌 시네머신 카메라
흔히 가상 카메라라고 부르며, 실제 카메라를 제어하는 역할을 합니다.
(예: 이동, 회전, 조건 등 다양한 카메라 제어 지원)
Position Control 과 Rotation Control 을 변경할 때마다 Cinemachine Component 가 추가되거나 삭제됩니다.
Cinemachine Component : 시네머신 카메라의 동작 방식을 정의하는 모듈
카메라의 이동 방식과 추적 방식, 뷰 조정 방식 등을 설정하여 카메라를 제어합니다.
[ 시네머신 카메라 컴포넌트 필드 분석 ]
- Status : 활성 상태 여부
- Priority : 시네머신 카메라의 우선 순위
- 숫자가 높을수록 우선 순위 높음
- 씬 내에 여러 시네머신 카메라가 있으면 우선순위가 가장 높은 카메라를 활성화
- Output Channel : 시네머신 브레인과 시네머신 카메라 간의 연결
- 시네머신 브레인의 Channel Mask와 같이 활용
- Standby Update : 시네머신 브레인이 비활성화 상태일 때 동작 방식
- Always : 비활성화 상태에서도 계속 업데이트
- Never : 비활성화 상태일 때 업데이트 멈춤
- Blend Hint : 시네머신 카메라 간 블렌딩 시 힌트 제공
- None : 기본 설정
- Spherical Position : 구형 보간 방식 위치 전환
- Cylindrical Position : 원통형 보간 방식 위치 전환
- Lens : 카메라 렌즈와 관련된 속성 정의
- FOV : 카메라 시야각 설정
- Near Clip Plane : 렌더링할 최소 거리
- Far Clip Plane : 렌더링할 최대 거리
- Dutch :
- Tracking Target : 추적할 대상 설정
- Look At Target : 항상 바라보는 대상 설정
- Save During Play : 플레이 모드 도중 카메라 설정을 유지할지 여부
- Game View Guides : 게임 뷰에서 카메라 정보 표시 여부
- Position Control : 시네머신 카메라 위치 제어 방식 설정
- Rotation Control : 시네머신 카메라 회전 제어 방식 설정
- Noise : 카메라의 흔들림 효과 설정
- Add Extension : 추가적인 기능 제공
- Cinemachine Confiner : 특정 영역 안에 제한
- Cinemachine Collider : 카메라와 장애물 간 충돌 처리
- Cinemachine Inmpulse Listener : 물리적인 충격에 반응하는 카메라 동작
빨간 영역은 주로 많이 사용하는 역할을 표시한 영역입니다.
📌 실습 환경을 통해 분석하기
[ Starter Asset 분석하기 ]
- Unity Camera : MainCamera 오브젝트에 Camera 컴포넌트 추가
- Cinemachine Brain : MainCamera 오브젝트에 Cinemachine Brain 컴포넌트 추가
- Cinemachine Camera : PlayerFollowCamera 오브젝트에 Cinemachine Camera 컴포넌트 추가
- Position Control 방식을 Third Person Follow 방식으로 설정
- Cinemachine Third Person Follow : Third Person Follow 방식 모듈이 자동으로 추가됨
즉, 1개의 유니티 카메라에 1개의 시네머신 브레인이 존재합니다.
그리고 현재는 이동 제어만 수행하는 1개의 시네머신 카메라가 배치되어 있습니다.
📝 정리
오늘은 시네머신의 아키텍처와 동작 원리, 그리고 주요 컴포넌트의 필드에 대해 살펴보았습니다.
다음 포스팅부터는 시네머신을 활용한 다양한 콘텐츠를 쉽게 구현하는 방법에 대해 알아보겠습니다.
'유니티(Unity) > 패키지: Cinemachine 정리' 카테고리의 다른 글
[Cinemachine] 카메라와 오브젝트 충돌 (0) | 2024.12.04 |
---|---|
[Cinemachine] 타겟 기반 시점 구현 (0) | 2024.12.03 |
[Cinemachine] 2.5D 구현 (3D 환경에서 2D 구현) (1) | 2024.12.02 |
[Cinemachine] 3인칭 시점 구현 (1) | 2024.12.01 |
[Cinemachine] 패키지 설치 및 준비 (Unity 6) (0) | 2024.11.28 |