이전 상태에서는, 카메라의 위치가 정적이라서 플레이하기 까다로웠다.
맵 전체를 보이자니 플레이어가 너무 작게 보이고, 맵을 확대하자니 플레이어 이동위치에 따라 플레이어가 보이지 않았다.
우리는 연출이 필요하다.
Cinemachine은 이러한 카메라의 움직임을 손쉽게 제어할수있는 유니티 공식 패키지이다.
사실 연출은 생각보다 까다롭다.
뛰어난 연출이 되어있는 게임은, 추적을 구현하는데 복잡한 수식이 필요하다.
직접 구현을 한다면, 좋은 장면이 나올 때까지 카메라 위치를 계속 변경하면서 카메라가 움직일 궤도를 그려야 한는데 이건 시간과 노력이 무척 드는 작업이다.
시네머신은 연출에 필요한 코드와 조정작업 대부분을 대체할 수 있다.
레이싱/어드벤쳐/TPs 등 장르마다 고유한 카메라 동작을 별다른 스크립트 작성없이 구현가능하며, 많은 컷신과 플레이의 부분을 자동화할 수 있다.
시네머신의 컴포넌트들은 초점/피사체배치/추적 지연시간/흔들림/전환 등 다양한 연출관련 수치를 제공한다.
이 값들을 연출 의도에 맞춰 변경하고, 카메라가 추적할 대상만 지정하면 알아서 시네머신 카메라가 목표물을 화면에 담아낸다.
시네머신 기본동작
시네머신이 기본제공하는 카메라는 2종류이다.
1. Brain Camera -> Scene당 1개 존재. 진짜 카메라
2. Virtual Camera -> Brain Camera의 분신역할. Brain Camera가 필요시 빙의하게 됨.
Virtual Camera 간의 빙의시, 카메라가 부드럽게 이동하게 처리되어있다.
Long Take 연출 또는 여러 카메라 사이에서의 부드러운 전환구현에 사용된다.
우리는 캐릭터 추적카메라가 필요하다. 따라서 카메라 전환기능은 불필요하다.
추적카메라를 만들어보자.
Brain Camera 와 Virtual Camera 만들기
이제 Follow Cam이 플레이어를 추적하도록 설정하자. 그냥 드래그 딸깍하면 된다.
Follow: 할당된 Game Object를 따라다닌다. Cam의 위치를 변경한다.
Look At: 할당된 Game Object를 주시한다. Cam의 회전을 변경한다.
Aim 을 클릭하면, Deadzone/Softzone/HardLimit이 등장한다.
데드존: 해당 위치에 대상이 있다면 카메라는 유지된다.
소프트존: 해당 위치에 대상이 있다면 부드럽게 카메라를 회전한다.
하드리밋: 해당 위치에 대상이 있다면 격하게 카메라를 회전한다.
하드리밋의 비율을 늘리면 카메라를 격하게 이동.
소프트존/데드존의 비율을 늘리면 카메라를 부드럽게 이동.
플레이어의 이동속도는 빠르므로, 우리는 하드리밋 비율을 크게 하자.
1. Lens > Field of View 20: 시야각을 줄이기(60->20): 줌인 효과를 준다.
2. BindingMode를 WordSpace로 변경 & Offset설정(-8, 16, -8)
-> Camera의 추적대상을 어떻게 따라다닐지를 결정.
-->대상과 카메라가 얼마나 떨어져있을지/어떻게 카메라가 매달릴지를 결정한다.
BindingMode가 WordSpace라면, 카메라와 몸체의 간격을 계산할 때, 전역공간 기준으로 계산토록 하며, (-8, 16, -8) 만큼 떨어져있게 한 것이다.
3. Damping: 제동값. 급격한 변화를 "얼마나 부드럽게 꺾어서" 이전값과 이후값을 잘 이어줄지를 결정. 커질수록 지연시간이 늘어나면서 부드럽게 변경됨.(1->0.1)
-> 따라서 우리 카메라는 신속하게 쫓아가게 변경되었다.
여기까지가 Lens, Body 파라미터 수정이었다.
이제 Aim 파라미터값을 수정하자.
1. LookAt에서, Offset을 수정해서 "추적대상에서 얼마나 떨어진 곳을 조준할지" 보정한다(실제 Object 중심보다 살짝 위를 찍도록 수정함)
2. Damping을 수직/수평 모두 0으로 한다. 즉 카메라가 날카롭게 회전한다.
3. 또한 Softzone 크기를 0으로 한다. 따라서 현재 카메라는 지연시간없이 Player를 즉시 조준한다.
플레이하면, 연출이 플레이어를 잘 따라가는 것을 볼 수 있다.
zombieSurvivor에서, 현재까지 배운 것은 아래와 같다.
- UnityPackage Manager 사용법
- Unity에서의 Lighting 설정법 및 Baking 의 개념
- Lightmap으로 적은 실시간 연산비용을 써서 라이트효과 구현가능.
- Global Illumination으로 간접광 구현가능.
- 환경광으로 게임 전체 색 분위기 조절가능.
- 여러 Animation을 섞어서 표현하는 방법
- BlendTree를 통해 여러 Clip을 섞어 사용가능하다.
- Animator Layer를 여러개만들어서 동시에 FSM 다수를 돌릴 수 있다.
- Animator Layer는 위에서 아래 순서로 적용된다.
- avatar Mask로 Animator를 3D 모델의 특정부위에만 적용할수있다.
- Input과 Actor 스크립트를 분리하는 구조와 C#의 Property 개념
- Property를 쓰면 새 값을 할당하거나 값을 가져올 때, 중간처리를 삽입할수있다.
- Auto-Implement Property 를 쓰면, Property를 간결히 생성할수있다.
- Cinemachine 을 통한 자동 추적 카메라
'Development > Unity Engine' 카테고리의 다른 글
[Retro유니티] Gun 스크립트 - Coroutine을 사용한 Shot, Reload 구현 (0) | 2024.12.19 |
---|---|
[Retro유니티] 인터페이스를 통한 IDamageable 구현 및 Guns 객체생성 (0) | 2024.12.17 |
[Retro유니티] 캐릭터 이동 구현 (1) | 2024.12.15 |
[Retro유니티] Upper Body 레이어 확인, Avatar Mask 적용 (0) | 2024.12.13 |
[Retro유니티] 플레이어 캐릭터 생성 및 Blend Tree Animator 분석 (0) | 2024.12.11 |