Unity Chapter 11-3. 좀비 TPS 게임 만들기 : 시네머신, 카메라
카테고리: Unity Lesson 1
태그: Unity Game Engine
인프런에 있는 이제민님의 레트로의 유니티 C# 게임 프로그래밍 에센스 강의를 듣고 정리한 필기입니다. 😀
🌜 [레트로의 유니티 C# 게임 프로그래밍 에센스] 강의 들으러 가기!
Chapter 11. 좀비 TPS 게임 만들기
🔔 플레이어 캐릭터 모델 준비
- 📂/Models/MazeLowMan 이 캐릭터가 될 모델이다. 이를 오브젝트화 시켜주자.
Player Character
로 이름을 변경해주었다.
🔔 플레이어 캐릭터에 달릴 ‘3인칭 카메라’ 만들기
- 📂Cinemachine 패키지를 사용하여 뛰어난 카메라 연출을 손쉽게 구현할 것이다.
- 복잡한 코드, 계산들을 대체해준다.
시네머신 카메라 종류
- Brain 카메라
- 게임 월드를 촬영하는 진짜 카메라
- 씬 안에 단 하나만 존재해야 한다.
- Virtual 카메라
- 여러개 존재 가능
- Brain 카메라의 분신 역할이 되며 씬의 여러 곳에 존재한다.
- 실제 카메라로 동작하지는 않는다.
- 그러나 Brain 카메라가 사용할 수 있는 여러가지 설정값을 제공한다.
Brain 카메라는 Virtual 카메라들 중 하나를 선택해서 현재 활성화 된 카메라로 지정하여 해당 Virtual 카메라로 이동하고 분신으로 삼는다.
- Brain 카메라가 선택한 Virtual 카메라로 이동하는 과정(=분신이 되는 과정)은 스무스하게 일어난다.
- 시점을 부드럽게 변경한다는 얘기.
- 분신이 된 Virtual 카메라의 설정값들은 Brain 카메라의 설정 값이 된다.
- 머리가 여러개의 몸을 교체하듯 Brain 카메라는 여러개의 Virtual 카메라들로 교체해가며 카메라 시점을 바꿀 수 있따.
Brain Camera 설정하기
Main Camera
를 Brain Camera로 설정한다.
Main Camera
에 Cinemachine Brain 컴포넌트를 추가하여 Brain Camera로 설정해준다.- 여러개의 가상 카메라 중 하나를 선택하여 사용할 수 있는 기능을 가진다.
- 실제 게임 월드를 촬영한건 얘다.
Virtual Camera 만들기 : Free Look
- 우리는 브레인 카메라 1개, 가상 카메라 1개 이렇게 만들 것.
- Brain 카메라의 촬영 방법을 결정하는건 바로 이 Virtual 카메라다.⭐
Create FreeLook Camera : 이것도 Virtual Camera이긴 한데 Virtual Camera에서 좀 더 확장된 카메라다. Virtual Camera에서 3인칭 카메라를 위한 파라미터들이 추가로 구현되어 있는 카메라기 때문에 상단 메뉴에서 이것을 선택하여 만들어주자.
- FreeLook Camera를 생성해주면 “CMFreeLook1”이라는 오브젝트가 생기는데 이름을
Follow Cam
으로 설정해주자.
추적할 대상 할당해주기
- 플레이어인
Player Character
을 추적할 것이다. Follow Cam
에 붙어있는 Cinemachine Free Look 컴포넌트의- Follow 👉
Player Character
할당- 카메라가 위치 를 따라갈 대상 지정.
- Look at 👉
Player Character
할당- 카메라가 회전을 해서 따라갈 대상 지정.
- Follow 👉
- 실행해보면 마우스를 통하여
Player Character
를 중심으로 공전할 수 있는데 그냥 virtual 카메라는 이 기능이 구현되어 있지 않다.
Virtual Camera의 그리드 라인의 의미
- 게임 창에서 라인을 드래그 하여 영역을 나눌 수 있다.
- Look at으로 주시할 대상을 할당하면 게임창 화면에 그리드가 보이게 되는데 각 칸 영역을 다음과 같이 부른다.
- 정 가운데 1칸 👉
데드존
- 주시 대상(노란 점)이 데드존 내에서 움직이는 동안에는 카메라가 회전하지 않는다.
- 그 주위 8칸 👉
소프트존
- 주시 대상(노란 점)이 소프트존 내에서 있다면 카메라 부드럽게 스무스하게 회전하여 주시 대상이 데드존 안으로 들어가게끔 한다.
- 테두리 👉
하드리밋
- 주시 대상(노란 점)이 소프트존 내에서 있다면 카메라 부드럽게 스무스하게 회전하여 주시 대상이 데드존 안으로 들어가게끔 한다.
- 화면에서 더 바깥에 있으니 소프트존보다 더 빠르고 격한 속도로 회전될 것이다.
- 정 가운데 1칸 👉
따라서 데드존이 클 수록 화면은 느리고 부드럽게 움직이며 데드존이 작을 수록 화면은 빠르고 격하게 움직인다.
- TPS 장르 특성상 빠른 화면 전환을 위해 데드존은 거의 점에 가깝도록 작게 해둘 것이다.
Freelook 카메라의 공전 궤도
- 빨간색 선은 Freelook 카메라가 캐릭터를 중심으로 공전하는 궤도다.
- 마우스 움직임에 따라 캐릭터를 공전한다.
- 정확히는 마우스의 수직방향 움직임에 따라 3개의 궤도 중 한 궤도로 결정된다.
- 궤도가 3개 있음
- 카메라가 가장 낮은 높이일 때 공전하게 될 궤도
TopRig
- 카메라가 중간 높이일 때 공전하게 될 궤도
MiddleRig
- 카메라가 가장 높은 놀이일 때 공전하게 될 궤도
BottomRig
- 카메라가 가장 낮은 높이일 때 공전하게 될 궤도
- 마우스 움직임에 따라 캐릭터를 공전한다.
Freelook 카메라 컴포넌트 파라미터 수정
- Cinemachine Free Look
- Lens
- Field Of View
- 카메라의 시야 각. 60으로 넓혀 준다.
- Field Of View
- Axis Control
- Y Axis
- Input Axix Value 옆에 있는 Invert 에 체크해주기
- : 현재 Input Axis에 Mouse Y가 할당되어 있는데 TPS 게임에서는 마우스 Y 값이 줄어들었을 때, 즉 마우스를 내리면 카메라는 반대로 위의 공전궤도로 올라가야 하기 때문에 Invert에 체크
- 마우스를 높이 올리면 카메라는 낮아지고 마우스 높이를 낮추면 카메라는 높아져야 한다.
- : 체크 안하면 마우스를 내리면 카메라도 낮은 공전궤도로 내려갈 것이다.
- : 현재 Input Axis에 Mouse Y가 할당되어 있는데 TPS 게임에서는 마우스 Y 값이 줄어들었을 때, 즉 마우스를 내리면 카메라는 반대로 위의 공전궤도로 올라가야 하기 때문에 Invert에 체크
- Input Axix Value 옆에 있는 Invert 에 체크해주기
- Y Axis Recentering
- 플레이어가 마우스를 한동안 건들지 않으면, 즉 일정시간 입력을 하지 않으면 자동으로 카메라의 높이를 중앙 공전 궤도로.
- 그냥 기본값 그대로 둠
- X Axis
- 얘는 Invert 체크 해제!
- 마우스가 오른쪽으로 가면 오른쪽을 바라볼 수 있도록 카메라가 공전하도록.
- 체크하면 마우스를 오른쪽으로 움직이면 왼쪽을 바라본다.
- 얘는 Invert 체크 해제!
- Y Axis
- Orbits
- Blinding Mode
- 추적 대상과 카메라 사이에 상대적인 거리와 방향을 정하는 방법
Simple Follow With World Up
- 카메라의 위쪽 방향은 전역공간, 즉 게임 세상의 위쪽으로 내버려두고
- 카메라의 위치가 최대한 덜 변하는 방향으로 플레이어의 움직임에 따라 카메라가 자동으로 회전, 이동한다.
- 플레이어가 왼쪽으로 움직이면 카메라도 왼쪽으로 같이 가되 살짝 플레이어를 바라보게끔 카메라가 살짝 틀어 회전한다.
- TPS엔 맞지 않다.
- 플레이어가 달리면 큰 원을 그리면서 달리는 현상이 발생한다.
World Space
로 변경해주기- 카메라와 타겟 사이의 거리가 전역 공간을 기준으로 결정
- 카메라의 회전이 타겟에 의해 임의로 변경되지 않게 한다.
- 플레이어가 왼쪽으로 움직이면 카메라도 왼쪽으로 같이 가기만 하지 플레이어를 바라보는식의 회전은 하지 않는다.
- 차이가 잘 와닿지 않으면 나중에 게임 완성하고난 후에 이 모드만 바꿔서 한번 테스트해보자
- 그림 출처 이제민님 강의
TopRig
: 맨 위 공전 궤도 1- 높이 3 반지름 1.3
-Body
- 카메라가 타겟의 위치를 따라가는 정도를 결정
- 카메라가 머리고 타겟을 몸으로 생각했을 때 머리가 몸을 따라서 어떻게 쫓아가야 할질르 결정.
- Damping
- 시간을 두고 부드럽고 스무스하게 해당 값에 도달하게 하는 것.
- Z Damping을 0.5로 해주고 X Dampinig은 0, Y Damping은 0.5
- 즉, 플레이어의 X향 위치 변경땐 카메라가 지연시간, 스무스하게 이런거 없이 즉시 따라가는데
- 플레이어가 Z 방향으로 움직일 땐, 즉 카메라 기준으로 앞 뒤로 움직일땐 살짝 지연시간을 두고 스무스하게 따라감.
- 플레이어가 Y 방향으로 움직일 땐, (떨어지거나 점프 같은거 할때) 즉 카메라 기준으로 위아래로 움직일땐 살짝 지연시간을 두고 스무스하게 따라감.
- Aim
- 카메라가 대상을 어떻게 조준할지를 결정.
- Tracked Object Offset
- 원래 추적하려는 대상에서 얼만큼 떨어진 위치를 조준할지를 결정
- 예를들어 Z 값을 높이면 추적중인 플레이어의 좀 더 앞쪽 위치를 조준하게 된다.
- Y 값을 1.3으로 변경해준다.
- 계속 Y 값이 0 이여가지고 카메라가
TogRig
에 있어도 카메라가 플레이어의 발바닥을 보고 있었는데 Y를 1.3으로 변경해주니 이제 카메라가 플레이어의 몸통을 조준하게 된다.
- 계속 Y 값이 0 이여가지고 카메라가
- ScreenX
- 0.3으로 설정
- 스크린이 X 방향으로 원래 스크린 위치로부터 0.3 정도 왼쪽으로 밀려나있는 효과를 준다.
- 보통 TPS 게임에서는 카메라가 추적하는 플레이어가 정중앙에 있지 않고 살짝 좌측에 있게끔 Screen을 왼쪽으로 0.3만큼 밀려져 보이게 한 것.
- ScreenX 값이 0 이면 카메라 타겟(플레이어)은 맨 왼쪽에 있고 ScreenX 값이 1이면 카메라 타겟은 맨 오른쪽에 있게 된다.
- ScrrenY
- 0.6으로 설정
- 하체보다는 상체가 좀 더 잘 보이도록 Screen을 위쪽으로 0.6만큼 밀어준 것.
- 높이 3 반지름 1.3
-Body
MiddleRig
: 가운데 공전 궤도 2- 높이 1.5 반지름 2
TopRig
와 똑같이 설정해주되 ScreenY는 0.65로.- ScreenX를 0.3으로 설정하니 아래와 같이 플레이어가 왼쪽에 배치된 것을 볼 수 있다.
BottomRig
: 맨 아래 공전 궤도 3- 높이 0.2 반지름 1.3
TopRig
와 똑같이 설정해주되 ScreenY는 0.7로.BottomRig
은 맨 아래 공전 궤도다보니깐 카메라가 아래에서 위를 바라보게 된다. 따라서 좀 더 위쪽을 잡아 준 것뿐.
- Blinding Mode
- Lens
카메라 콜라이더
카메라가 충돌될 수 있는 물체들을 피해서 플레이어를 추적할 수 있도록 하기
- 3인칭 카메라가 플레이어를 따라다니다가 벽이나 다른 물체들 같은 곳에 파묻혀서 플레이어를 못찍게 될 수 있으므로 이를 피해야 한다.
- ⭐ 카메라에게 가상의 Collider를 할당하여 충돌 처리가 일어나면 파묻히지 않고 피하도록 해야 한다.
- 예를 들어 카메라가 플레이어를 쫓다가 벽과 충돌하면 벽에 파묻히는게 아니라 벽과의 충돌을 느끼고 벽 표면에서 카메라를 추적하도록
- 카메라와 플레이어 사이에 있는 물체도 감지하여 물체가 플에이어를 찍는데 가리지 않도록 한다.
- 카메라와 플레이어 사이에 물체가 있으면 자동으로 뛰어 넘어야 함.
- Cinemachine Free Look
- 가장 하단에 Extensions
- Add Extension 에서
CinemachineCollider
확장 기능을 선택하면 Collider 컴포넌트가 카메라에 붙게 된다.- 이 컴포넌트만 붙어있으면 알아서 1. 충돌되는 물체에 파묻히지 않도록, 2. 카메라와 플레이어 사이에 있는 물체가 카메라를 가리지 않도록 피해준다.
Ignore Tag
에서Player
를 선택해준다.- 카메라가 플레이어는 피하면 안되니까 !
- Sommothing Time
- 0.1
- 부드럽게 움직이는데 들어가는 지연 시간
- Damping
- 0.4
- 값을 부드럽게 꺾는 정도
- Damping When Occluded
- 0.28
- Occulusion 상태에서 값을 꺾는 정도
- 카메라가 어떤 물체에 파묻혀서 벗어날 때 사용하는 값
- 이 컴포넌트만 붙어있으면 알아서 1. 충돌되는 물체에 파묻히지 않도록, 2. 카메라와 플레이어 사이에 있는 물체가 카메라를 가리지 않도록 피해준다.
- Add Extension 에서
- 가장 하단에 Extensions
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글 남기기