
키보드를 눌러 카메라 이동을 제어해보자. Field라는 빈 오브젝트를 만들어서 해당 오브젝트에 Node들을 넣어주었다.

카메라는 해당 Filed의 중앙을 기준으로 구체형태로 움직일 수 있도록 구현할 것이다.

이런 식으로 카메라는 target Object와 거리를 일정 수준 유지하면서 'WASD' 키를 입력해서 상하좌우로 움직이도록 구현해보자.
일단 가장 먼저 시네머신을 사용해서 추후에 필요한 여러 카메라의 기능적 동작들을 쉽게 사용할 수 있도록 하는 것이 좋을 것 같아서 프로젝트에 시네머신을 import해서 설정해주었다.

시네머신에는 다양한 종류가 있다. 그 중에서도 FreeLook Camera를 활용해서 오브젝트를 중심으로 원형의 링을 생성하여 타깃을 관찰할 수 있도록 했다. 다른 카메라에 관한 설명은 시네머신을 정리해놓은 다양한 블로그들이 있으니깐 참고하면 이해하기 쉽다.
- 유니티 공식 문서 : Cinmachine Documentation
- 프로젝트에서 사용하는 FreeLook Camera에 관한 설명이 담긴 공식 문서이다.

FreeLook Camera에 바라볼 오브젝트를 Look At 속성에 초기화해준 다음 FreeLook Caemra를 움직여보면 해당 오브젝트를 바라보면서 움직이는 것을 알 수 있다.


z축으로만 움직였는데 카메라가 알아서 Object를 바라보는 모습이다.
FreeLook Camera의 기본적인 사용법은 아래 유튜브 영상을 주로 참고했다.

위와 같이 Rig을 설정해주고 카메라를 움직여보았다.
키보드로 제어해주기 위해서 Axis Control의 Input Axis Name을 아래와 같이 "Vertical", "Horizontal"로 바꾸어주었다.
- 입력에 대한 Axis Name이 궁금하다면 Edit > Project Settings > Input Manager을 확인해보면 된다.
테스트 해보면서 적절한 Rig 크기와 카메라 이동속도를 조절해주었다.

테스트한 내용을 그대로 유지시키고 싶다면 Save During Play를 체크해주면서 값을 조절하면 된다.
하지만 카메라를 움직일 수는 있지만 카메라를 확대, 축소 할 수가 없다. 줌 인, 줌 아웃이 가능하도록 FreeLook Camera를 제어하는 스크립트를 하나 작성해주자.
using Cinemachine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CMFreelookSetting : MonoBehaviour
{
CinemachineFreeLook freelook;
public float zoomSpeed = 2.5f;
private void Start()
{
freelook = GetComponent<CinemachineFreeLook>();
}
private void Update()
{
if (Input.GetKey("q")) // Press "q" Key = Zoom in
{
if(freelook.m_Lens.FieldOfView >= 5)
freelook.m_Lens.FieldOfView -= zoomSpeed * Time.deltaTime; //Zoom In
}
if (Input.GetKey("e")) // Pree "e" Key = Zoom out
{
if (freelook.m_Lens.FieldOfView <= 20)
freelook.m_Lens.FieldOfView += zoomSpeed * Time.deltaTime; //Zoom Out
}
}
}
FOV를 통해 줌 인, 줌 아웃을 구현했고, zoomSpeed를 제어할 수 있도록 해놓았다. 추후에 플레이어가 줌 속도를 직접 컨트롤할 수 있을지 말지는 직접 테스트해보면서 적용시킬 예정이다. 또한 조건문을 한 줄 추가해서 너무 멀리 줌 아웃되거나 너무 가까이 줌 인할 수 없도록 구현해놓았다.
이제 시작 포인트, 끝 포인트를 만들어서 전기가 흐르는 로직을 구현해보자. 그 이후에는 맵 생성 매커니즘과 기타 블럭들을 추가할 예정이다.