Unity Chapter 11-3. 좀비 TPS 게임 만들기 : 시네머신, 카메라

Date:     Updated:

카테고리:

태그:

인프런에 있는 이제민님의 레트로의 유니티 C# 게임 프로그래밍 에센스 강의를 듣고 정리한 필기입니다. 😀
🌜 [레트로의 유니티 C# 게임 프로그래밍 에센스] 강의 들으러 가기!


Chapter 11. 좀비 TPS 게임 만들기

🔔 플레이어 캐릭터 모델 준비

  • 📂/Models/MazeLowMan 이 캐릭터가 될 모델이다. 이를 오브젝트화 시켜주자.
    • Player Character로 이름을 변경해주었다.


🔔 플레이어 캐릭터에 달릴 ‘3인칭 카메라’ 만들기

  • 📂Cinemachine 패키지를 사용하여 뛰어난 카메라 연출을 손쉽게 구현할 것이다.
    • 복잡한 코드, 계산들을 대체해준다.

시네머신 카메라 종류

  1. Brain 카메라
    • 게임 월드를 촬영하는 진짜 카메라
    • 씬 안에 단 하나만 존재해야 한다.
  2. Virtual 카메라
    • 여러개 존재 가능
    • Brain 카메라의 분신 역할이 되며 씬의 여러 곳에 존재한다.
    • 실제 카메라로 동작하지는 않는다.
    • 그러나 Brain 카메라가 사용할 수 있는 여러가지 설정값을 제공한다.

Brain 카메라는 Virtual 카메라들 중 하나를 선택해서 현재 활성화 된 카메라로 지정하여 해당 Virtual 카메라로 이동하고 분신으로 삼는다.

  • Brain 카메라가 선택한 Virtual 카메라로 이동하는 과정(=분신이 되는 과정)은 스무스하게 일어난다.
    • 시점을 부드럽게 변경한다는 얘기.
  • 분신이 된 Virtual 카메라의 설정값들은 Brain 카메라의 설정 값이 된다.
  • 머리가 여러개의 몸을 교체하듯 Brain 카메라는 여러개의 Virtual 카메라들로 교체해가며 카메라 시점을 바꿀 수 있따.


Brain Camera 설정하기

Main Camera를 Brain Camera로 설정한다.

  • Main CameraCinemachine Brain 컴포넌트를 추가하여 Brain Camera로 설정해준다.
    • 여러개의 가상 카메라 중 하나를 선택하여 사용할 수 있는 기능을 가진다.
    • 실제 게임 월드를 촬영한건 얘다.


Virtual Camera 만들기 : Free Look

  • 우리는 브레인 카메라 1개, 가상 카메라 1개 이렇게 만들 것.
  • Brain 카메라의 촬영 방법을 결정하는건 바로 이 Virtual 카메라다.

image

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 할당
      • 카메라가 회전을 해서 따라갈 대상 지정.
  • 실행해보면 마우스를 통하여 Player Character를 중심으로 공전할 수 있는데 그냥 virtual 카메라는 이 기능이 구현되어 있지 않다.


Virtual Camera의 그리드 라인의 의미

image

  • 게임 창에서 라인을 드래그 하여 영역을 나눌 수 있다.
  • Look at으로 주시할 대상을 할당하면 게임창 화면에 그리드가 보이게 되는데 각 칸 영역을 다음과 같이 부른다.
    • 정 가운데 1칸 👉 데드존
      • 주시 대상(노란 점)이 데드존 내에서 움직이는 동안에는 카메라가 회전하지 않는다.
    • 그 주위 8칸 👉 소프트존
      • 주시 대상(노란 점)이 소프트존 내에서 있다면 카메라 부드럽게 스무스하게 회전하여 주시 대상이 데드존 안으로 들어가게끔 한다.
    • 테두리 👉 하드리밋
      • 주시 대상(노란 점)이 소프트존 내에서 있다면 카메라 부드럽게 스무스하게 회전하여 주시 대상이 데드존 안으로 들어가게끔 한다.
      • 화면에서 더 바깥에 있으니 소프트존보다 더 빠르고 격한 속도로 회전될 것이다.

따라서 데드존이 클 수록 화면은 느리고 부드럽게 움직이며 데드존이 작을 수록 화면은 빠르고 격하게 움직인다.

  • TPS 장르 특성상 빠른 화면 전환을 위해 데드존은 거의 점에 가깝도록 작게 해둘 것이다.
    • image


Freelook 카메라의 공전 궤도

image

  • 빨간색 선은 Freelook 카메라가 캐릭터를 중심으로 공전하는 궤도다.
    • 마우스 움직임에 따라 캐릭터를 공전한다.
      • 정확히는 마우스의 수직방향 움직임에 따라 3개의 궤도 중 한 궤도로 결정된다.
    • 궤도가 3개 있음
      • 카메라가 가장 낮은 높이일 때 공전하게 될 궤도 TopRig
      • 카메라가 중간 높이일 때 공전하게 될 궤도 MiddleRig
      • 카메라가 가장 높은 놀이일 때 공전하게 될 궤도 BottomRig


Freelook 카메라 컴포넌트 파라미터 수정

  • Cinemachine Free Look
    • Lens
      • Field Of View
        • 카메라의 시야 각. 60으로 넓혀 준다.
    • Axis Control
      • Y Axis
        • Input Axix Value 옆에 있는 Invert 에 체크해주기
          • : 현재 Input Axis에 Mouse Y가 할당되어 있는데 TPS 게임에서는 마우스 Y 값이 줄어들었을 때, 즉 마우스를 내리면 카메라는 반대로 위의 공전궤도로 올라가야 하기 때문에 Invert에 체크
            • 마우스를 높이 올리면 카메라는 낮아지고 마우스 높이를 낮추면 카메라는 높아져야 한다.
          • : 체크 안하면 마우스를 내리면 카메라도 낮은 공전궤도로 내려갈 것이다.
      • Y Axis Recentering
        • 플레이어가 마우스를 한동안 건들지 않으면, 즉 일정시간 입력을 하지 않으면 자동으로 카메라의 높이를 중앙 공전 궤도로.
        • 그냥 기본값 그대로 둠
      • X Axis
        • 얘는 Invert 체크 해제!
          • 마우스가 오른쪽으로 가면 오른쪽을 바라볼 수 있도록 카메라가 공전하도록.
        • 체크하면 마우스를 오른쪽으로 움직이면 왼쪽을 바라본다.
    • Orbits
      • Blinding Mode
        • 추적 대상과 카메라 사이에 상대적인 거리와 방향을 정하는 방법
        • Simple Follow With World Up
          • 카메라의 위쪽 방향은 전역공간, 즉 게임 세상의 위쪽으로 내버려두고
          • 카메라의 위치가 최대한 덜 변하는 방향으로 플레이어의 움직임에 따라 카메라가 자동으로 회전, 이동한다.
            • 플레이어가 왼쪽으로 움직이면 카메라도 왼쪽으로 같이 가되 살짝 플레이어를 바라보게끔 카메라가 살짝 틀어 회전한다.
          • TPS엔 맞지 않다.
            • 플레이어가 달리면 큰 원을 그리면서 달리는 현상이 발생한다.
        • World Space로 변경해주기
          • 카메라와 타겟 사이의 거리가 전역 공간을 기준으로 결정
          • 카메라의 회전이 타겟에 의해 임의로 변경되지 않게 한다.
            • 플레이어가 왼쪽으로 움직이면 카메라도 왼쪽으로 같이 가기만 하지 플레이어를 바라보는식의 회전은 하지 않는다.
        • 차이가 잘 와닿지 않으면 나중에 게임 완성하고난 후에 이 모드만 바꿔서 한번 테스트해보자
          • image
          • 그림 출처 이제민님 강의
      • 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으로 변경해주니 이제 카메라가 플레이어의 몸통을 조준하게 된다.
            • ScreenX
              • 0.3으로 설정
              • 스크린이 X 방향으로 원래 스크린 위치로부터 0.3 정도 왼쪽으로 밀려나있는 효과를 준다.
              • 보통 TPS 게임에서는 카메라가 추적하는 플레이어가 정중앙에 있지 않고 살짝 좌측에 있게끔 Screen을 왼쪽으로 0.3만큼 밀려져 보이게 한 것.
                • ScreenX 값이 0 이면 카메라 타겟(플레이어)은 맨 왼쪽에 있고 ScreenX 값이 1이면 카메라 타겟은 맨 오른쪽에 있게 된다.
            • ScrrenY
              • 0.6으로 설정
              • 하체보다는 상체가 좀 더 잘 보이도록 Screen을 위쪽으로 0.6만큼 밀어준 것.
      • MiddleRig : 가운데 공전 궤도 2
        • 높이 1.5 반지름 2
        • TopRig와 똑같이 설정해주되 ScreenY는 0.65로.
        • ScreenX를 0.3으로 설정하니 아래와 같이 플레이어가 왼쪽에 배치된 것을 볼 수 있다.
          • image
      • BottomRig : 맨 아래 공전 궤도 3
        • 높이 0.2 반지름 1.3
        • TopRig와 똑같이 설정해주되 ScreenY는 0.7로.
          • BottomRig은 맨 아래 공전 궤도다보니깐 카메라가 아래에서 위를 바라보게 된다. 따라서 좀 더 위쪽을 잡아 준 것뿐.


카메라 콜라이더

카메라가 충돌될 수 있는 물체들을 피해서 플레이어를 추적할 수 있도록 하기

  • 3인칭 카메라가 플레이어를 따라다니다가 벽이나 다른 물체들 같은 곳에 파묻혀서 플레이어를 못찍게 될 수 있으므로 이를 피해야 한다.
  • 카메라에게 가상의 Collider를 할당하여 충돌 처리가 일어나면 파묻히지 않고 피하도록 해야 한다.
    • 예를 들어 카메라가 플레이어를 쫓다가 벽과 충돌하면 벽에 파묻히는게 아니라 벽과의 충돌을 느끼고 벽 표면에서 카메라를 추적하도록
  • 카메라와 플레이어 사이에 있는 물체도 감지하여 물체가 플에이어를 찍는데 가리지 않도록 한다.
    • 카메라와 플레이어 사이에 물체가 있으면 자동으로 뛰어 넘어야 함.
  • Cinemachine Free Look
    • 가장 하단에 Extensions
      • Add Extension 에서 CinemachineCollider 확장 기능을 선택하면 Collider 컴포넌트가 카메라에 붙게 된다.
        • image
        • 이 컴포넌트만 붙어있으면 알아서 1. 충돌되는 물체에 파묻히지 않도록, 2. 카메라와 플레이어 사이에 있는 물체가 카메라를 가리지 않도록 피해준다.
          • Ignore Tag에서 Player를 선택해준다.
            • 카메라가 플레이어는 피하면 안되니까 !
          • Sommothing Time
            • 0.1
            • 부드럽게 움직이는데 들어가는 지연 시간
          • Damping
            • 0.4
            • 값을 부드럽게 꺾는 정도
          • Damping When Occluded
            • 0.28
            • Occulusion 상태에서 값을 꺾는 정도
              • 카메라가 어떤 물체에 파묻혀서 벗어날 때 사용하는 값


🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기


Unity Lesson 1 카테고리 내 다른 글 보러가기

댓글 남기기