2022. 6. 3. 22:08ㆍ유니티, C#
본 글은 Unity Korea의 "Dev Weeks: 스마트한 카메라 시스템, 시네머신 파헤치기"를 정리한 글 입니다.
https://www.youtube.com/watch?v=2oOIp22Y11U&ab_channel=UnityKorea
시네머신 샘플로 본 기능
FreeLook : 마우스를 따라 카메라가 움직임(예 : 배틀그라운드 카메라)
Aim 모드 : n배율 스코프 효과
Clear Shot : 카메라를 블랜딩해 주인공이 안보일때 잘 보이는 카메라로 전환
Dolly : 카메라가 레일 위에서 주인공을 따라다님
Noise : 카메라 흔들림(핸드헬드 효과)
Impulse : 카메라 흔들림(물체가 땅에 충돌할 때의 진동 효과)
State Driven Camera(상태 기반 카메라) : 주인공의 상태에 따라 카메라 효과가 달라짐(예 : 주인공이 걸을 땐 평범한 자유시점 -> 주인공이 뛸 땐 Noise 추가)
Mixing Camera : 카메라 두개를 섞어 표현(예 : 정면을 보는 카메라와 위에서 아래로 보는 카메라 두 개의 시점을 섞어 대각선을 바라보게함. 주인공이 카메라에서 멀어지면 시점이 위로 올라감.)
FollowZoom : 주인공이 멀어지면 화각을 줄이고, 가까워지면 화각을 늘림. 항상 줌 인 되어있는 상태.
시네머신 카메라의 종류
Virtual Camera
inspector)
Transposer : 광범위한 타겟팅.
Composer : 피사체를 따라 회전.
CinemachineVirtualCamera - Save During Play : 플레이 하는동안 저장 가능.
CinemachineVirtualCamera - Priority : Virtual Camera간에 우선 순위를 설정. 우선 순위가 높은 카메라가 Main 카메라가 됨.
CinemachineVirtualCamera - Follow : 카메라가 위치를 바꿔가며 따라갈 대상.
CinemachineVirtualCamera - Look At : 카메라의 위치는 고정시키고 주시할 대상. //트래킹 타겟을 캐릭터 아래에 Empty Object를 생성하고 위치를 잡으면 캐릭터 주변의 원하는 위치를 트래킹 가능.
CinemachineVirtualCamera - Lens - Fiend Of View : 카메라 화각 조정.
CinemachineVirtualCamera - Aim - Damping : 어느 정도로 Dead Zone을 벗어나도 되는지 설정. 값이 커질 수록 Dead Zone을 많이 벗어남.
CinemachineVirtualCamera - Aim - Screen X, Screen Y : 대상을 화면의 어느 쪽에 치우치게 할 것인지 설정.
CinemachineVirtualCamera - Aim - Dead Zone Width, Dead Zone Height : 벗어나면 트래킹할 영역 설정. 약간은 벗어날 수 있음.
CinemachineVirtualCamera - Aim - Soft Zone Width, Soft Zone Height : 절대 벗어날 수 없는 영역 설정.
CinemachineVirtualCamera - Body - Follow Offset : Follow시에 카메라 위치 설정.
Virtual Camera - Add Extension - Cinemachine Follow Zoom : 멀어지면 화각을 좁히고 가까워지면 화각을 늘리면서 대상의 거리에 관계없이 줌인하는 기능.
Dolly Camera with Track
카메라가 일자트랙 위에서 움직이며 피사체를 쫓음. 영화에서 많이 사용하는 방법.
Dolly Track with Cart
물체가 만들어 놓은 트랙 위를 떠다님. 열기구 같이 떠다니는 물체 표현에 좋음.
DollyTrack과 DollyCart 오브젝트 두 개가 생성됨.
DollyCart의 아래에 오브젝트를 생성하면 DollyTrack 위에서 움직임.
FreeLook Camera
카메라가 마우스를 따라다니며 자유롭게 시점을 바꿀 수 있음.
FreeLook Camera에는 Top Rig, Middle Rig, Bottom Rig로 총 세 가지 궤도(Orbit)가 있음.
inspector)
Top Rig : 위에서 피사체를 내려다 볼 때의 설정
Middle Rig : 중간에서 피사체를 볼 때의 설정
Bottom Rig : 아래에서 피사체를 올려다 볼 때의 설정
각 Rig별로 Body와 Aim 인스펙터를 설정할 수 있음
Target Group Camera
여러 오브젝트들을 한 카메라의 화각에 넣음.
Target Group Camera를 추가하면 Virtual Camera와 TargetGroup 오브젝트가 생성된다.
카메라에 담길 오브젝트들을 CinemachineTargetGroup - Target에 추가한다.
스포츠 중계, 액션 장면에서 쓸 수 있음.
ClearShot Camera
카메라를 여러 대 두고 피사체가 보이지 않을 때 피사체가 보이는 카메라로 전환.
ClearShot Camera를 추가하면 CM ClearShot 오브젝트가 생성된다.
CM ClearShot의 아래에 구역별로 비추는 카메라들을 넣으면 타겟이 보이지 않을때 타겟이 보이는 카메라로 시점이 자동으로 이동한다.
카메라로 효과 주기
화면 전환 방법
1. Timeline 사용
빈 오브젝트에 타임라인을 설정하고 카메라를 배치한 뒤 Playable Director - Wrap Mode :: Loop 설정해주면 타임라인이 반복되면서 카메라 전환
게임 플레이와 타임라인을 믹싱 가능.
카메라 우선순위(Priority)는 타임라인이 가장 높은 우선순위. 타임라인이 없을땐 우선순위 설정대로 카메라 동작.
2. Priority 설정
NPC 대화와 같이 게임 플레이 중에 스크립트로 Priority값을 변경해주면 자연스러운 카메라 전환이 가능.
Main Camera - Cinemachine Brain - Default Blend : 카메라 블랜딩시에 효과 설정 (예 : cut - 화면이 끊기고 바로 다음 카메라로 넘어감, ease in out - 자연스럽게 다음 카메라까지 이어짐, custom - CamA -> CamB는 cut CamB -> CamC는 ease in out 등)
카메라 Impulse 주는 법(예 : 보스 몬스터가 등장하면서 걸어올 때 땅이 울리면서 카메라가 흔들리는 효과)
맵에 충격을 주는 물체에 Rigidbody와 Cinemachine Collision Impulse Source 스크립트를 컴포넌트로 추가.
Cinemachine Collision Impulse Source - Impulse Channel과 Virtual Camera의 Channel Mask가 같으면(레이어와 비슷한 기능) 충격을 받을 때 마다 노이즈 효과.
Virtual Camera에 Cinemachine Impulse Listener를 Add Extension에서 추가.
오브젝트에 Impulse 주는 법(예 : 보스 몬스터가 등장하면서 걸어올 때 땅이 울리면서 오브젝트가 흔들리는 효과)
오브젝트에 Cinemachine Independent Impulse Listener 스크립트 추가.
Cinemachine의 특징
Cinemachine의 Virtual Camera는 "가상" 카메라이기 때문에 성능에 큰 영향을 끼치지 않는다.
실제로 유니티는 카메라를 여러개 쓰지 않는 것을 권장한다.
'유니티, C#' 카테고리의 다른 글
| [C#] out과 ref의 차이 / 용도 (0) | 2023.04.18 |
|---|---|
| [유니티, C#] SerializeField와 Serializable 차이 (0) | 2023.04.17 |
| [C#] 인터페이스와 추상클래스 (0) | 2022.05.04 |
| [C#] Value type과 Reference type (0) | 2022.05.04 |
| [유니티 2D] 씬 전환, 텍스트 박스 Fade in / Fade out Coroutine으로 구현하기 (0) | 2022.03.02 |