플레이어 카메라 제어

# 학습 과정 소개

게임의 메인 카메라는 항상 플레이어를 따라다닙니다. 메인 카메라를 제어하는 camera 컴포넌트는 MapleStoryPlayer 모델이 가지고 있으며 이 모델의 프로퍼티 에디터나 스크립트를 이용해 주요 값을 수정할 수 있습니다. 이번 과정에서는 Camera 컴포넌트를 프로퍼티 에디터를 통해 수정해보며 전반적인 기능을 알아보는 시간을 가져보도록 하겠습니다.

# Camera 컴포넌트 접근

Workspace에서 DefaultPlayer 모델을 선택합니다. [png](1635470229255887ebcf3484b4ceb8a43d4b77d8af063)   
프로퍼티 에디터에서 CameraComponent를 확인합니다. CameraComponent에서는 카메라 설정을 위한 여러 프로퍼티를 제공합니다. [png](1653012043486ba0619b7c3984494b5a7091c43500689)   
카메라 컴포넌트에 있는 속성들을 하나씩 살펴보겠습니다.

# DeadZone

아래 영상을 보면 좌, 우로 플레이어 아바타가 조금씩 이동했을 때 카메라가 따라 움직이지 않습니다. [gif](1657019820558b44468bafaf543d09447717a4987613f)   
점프하더라도 Y축으로 플레이어 아바타가 위로 올라갔다 내려오지만, 카메라는 이동하지 않습니다. 이처럼 플레이어 아바타가 DeadZone 에 있는 동안 카메라가 플레이어 아바타의 움직임을 따라가지 않습니다. [png](165702062238605bd4be1a9174ee48bc5ce6512c80f0f)   
만약 DeadZone 값을 0으로 변경하면 아래와 같이 작은 이동에도 카메라가 반응하게 됩니다. [gif](1657019829316abef7f6dc9b94ec79cc6865a63e25d67)   
제작하는 게임에 따라 데드존이 없을 경우 민감한 카메라 움직임으로 게이머의 피로가 높아질 수 있습니다. 하지만 빠른 움직임이 필요한 게임에서 데드존을 크게 설정할 경우 움직임에 대한 체감이 좋지 않을 수 있습니다. 따라서 제작하시는 게임의 성향에 맞춰 이 값을 잘 조정해주시면 게임이 의도하는 체감을 잘 살릴 수 있습니다.

# SoftZone

DeadZone 밖에는 SoftZone 영역이 있습니다. [png](1657017680023250571fd27f94d1cbda001a2b372ae8c)   
플레이어 아바타가 소프트 존에 위치하면 카메라는 플레이어 아바타가 화면 밖으로 벗어나지 않도록 추적하기 시작합니다. 만약 소프트 존 밖으로 이동할 때 카메라는 더 빠른 움직임으로 플레이어 아바타를 따라갑니다.

# Damping

Damping은 플레이어 아바타가 데드존을 이탈하여 카메라의 빠른 움직임을 꺾어 이전과 이후를 부드럽게 이어주는 비율입니다. 이 값이 커지면 카메라가 플레이어 아바타를 추적하는 속도가 부드러워집니다. 극단적인 예시로 앞서 언급한 SoftZone과 Damping 값을 큰 수치로 높이면 플레이어 아바타를 쫓는 속도가 극단적으로 느려져 플레이어 아바타가 카메라를 이탈할 수 있는 상황이 발생합니다. [gif](16570191045568fcfc3ae70714c339d1c00f8769f5b1a)

# CameraOffSet

카메라가 플레이어를 비추는 위치를 수정합니다. 아래 기본값과 수정값의 차이를 보면 쉽게 이해할 수 있습니다. (x값 변경) [png](16570177781742ef034f8531742fb95c3726007ac09c2)[png](165701780364165f094a24a814c2ba6410832691f10d2)

# DutchAngle

카메라의 회전 값을 설정합니다. 각도를 입력하며 80을 입력하면 아래와 같이 보입니다. [png](16570178319148e3e4420a1164958a85a65787011d4a2)

# Screen Offset

CameraOffset과 유사한 형태로 플레이어 아바타를 비추는 지점을 수정할 수 있으나, 이 값은 대상을 기준으로 한 전체 스크린의 비율 값입니다. 0부터 1 사이의 값을 입력할 수 있고, 값이 0.5일 경우 카메라가 중앙에 위치합니다. 예를 들어, X 값으로 0.8을 입력하면 아래와 같이 플레이어 아바타가 화면 오른쪽에 위치하게 됩니다. [png](16570178556921cd2a75c27ca4ad1ab666cbadf106ba2)

# isAllowZoomInOut

메이커 화면에서는 마우스 휠을 위/아래로 이동할 때 화면을 줌/인 아웃을 할 수 있는데요. 이 값이 True로 설정되어 있으면 플레이 진행 중에 플레이어가 마우스 휠을 이용해 줌 인/아웃 할 수 있습니다. [gif](165701854542594cce980f29f4bc9b9c14dc75c766830)

# UseCustomBound

카메라 제한 영역을 직접 정의해서 사용할 지 여부를 설정합니다. UseCustomBound 값이 True라면 LeftBottom, RightTop 프로퍼티를 사용해 카메라 제한 영역을 정의할 수 있습니다. Collider Edit 버튼을 누르면  Scene에 표시되는 기즈모를 통해 카메라 제한 영역을 시각적으로 확인하거나 핸들러를 통해 손쉽게 영역을 조절할 수 있습니다. [gif](16570204046562c59667490614c61917b3a312c8579a5) CameraComponent - UseCustomBound 값이 False라면 맵 영역을 카메라 제한 영역으로 사용합니다. 맵 영역은 MapComponent - UseCustomBound 값이 False일 경우, 기본 상태로 설정되어 있는 것입니다. 이처럼 맵 영역이 기본 상태일 때는 그 기본을 바탕으로 보정된 영역을 카메라 제한 영역으로 사용하게 됩니다. 하지만 MapComponent - UseCustomBound 값이 True라면 크리에이터가 설정한 맵 영역을 카메라 제한 영역으로 사용합니다. 내용을 정리하면 아래와 같습니다.

[{"컴포넌트 설정":"CameraComponent - UseCustomBound - True","카메라 제한 영역":"크리에이터가 정의한 카메라 제한 영역 사용"},{"컴포넌트 설정":"CameraComponent - UseCustomBound - False MapComponent - UseCustomBound - True","카메라 제한 영역":"크리에이터가 정의한 맵 영역을 카메라 제한 영역으로 사용"},{"컴포넌트 설정":"CameraComponent - UseCustomBound - FalseMapComponent - UseCustomBound - False","카메라 제한 영역":"기본 맵 영역을 바탕으로 보정된 영역을 카메라 제한 영역으로 사용"}]