시네머신(Cinemachine)은 Unity에서 제공하는 고급 카메라 시스템이다.
이 시스템은 게임, 영화, 애니메이션 등에서 다양한 카메라 워크플로우를 지원하며, 카메라 이동, 추적, 매핑, 블렌딩 등을 쉽게 구현할 수 있도록 도와준다. 시네머신은 Unity 2017 버전 이후부터 기본적으로 포함되어 있으며, 유니티 에셋 스토어에서도 추가적인 확장 패키지를 얻을 수 있다.
Unity Cinemachine Docs :
https://docs.unity3d.com/kr/Packages/com.unity.cinemachine@2.3/manual/CinemachineOverview.html
가상 카메라(Virtual Camera) : 시네머신은 가상 카메라를 사용하여 실제 카메라가 없는 상태에서도 여러 가상 카메라의 시점과 속성을 조작할 수 있다. 각 가상 카메라는 독립적인 카메라 속성을 가지며, 원하는 순간에 활성화되거나 비활성화될 수 있다.
카메라 블렌딩 : 여러 가상 카메라 간에 자연스럽게 전환하기 위해 블렌딩 기능을 제공한다. 카메라의 위치, 회전, 시야 등이 부드럽게 전환되어 자연스러운 카메라 이동을 구현할 수 있다.
트랙킹과 추적 : 시네머신은 오브젝트나 캐릭터를 추적하여 자동으로 카메라를 따라가도록 지원한다. 특정 타겟을 추적하거나 경로를 따라 이동하는 카메라 워크플로우를 구현할 수 있다.
애니메이션 연동 : 시네머신은 애니메이션 시스템과 연동하여 카메라의 속성을 애니메이션과 동기화할 수 있다.
렌즈 세트 : 렌즈 세트를 사용하여 렌즈 조작을 편리하게 할 수 있습니다. 줌, 화각, 특수 렌즈 효과 등을 쉽게 적용할 수 있다.
하이라키창에서 우클릭 → Cinemachine → Virtual Camera 생성
생성하면 Main Camera에 CinemachineBrain이라는 컴포넌트가 생성된다.
카메라가 플레이어를 따라다니도록 Virtual Camera에서 Follow를 Player로 설정해준다.
그러나 설정해주면 게임뷰에서 카메라가 이상하게 동작하는 것을 확인할 수 있다.
갑자기 화면에 아무것도 안보이게 되는데, 이는 Player의 Position 값이 (0, 0, 0)이기 때문이다. 이 Position은 Player가 지면과 맞닿아 있는 발바닥의 좌표값이기 때문에 자연스레 카메라도 땅바닥에 박혀있게 되는 것이다. 따라서 Player의 시점으로 볼 수 있는 Position 값이 필요하다.
빈 오브젝트를 만들고 이름을 CameraLookPoint로 만들어준다. 이후 플레이어의 어깨 높이 내지는 눈 높이 정도로 PosY 값을 변경해준다. 이후 Virtual Camera에게 Follow와 Look At을 모두 CameraLookPoint로 변경해준다.
그러면 카메라가 플레이어를 따라다니기는 하나 이상하게 동작하는 것을 확인할 수 있다.
이를 수정해주자.
Virtual Camera의 CinemachineVirtualCamera 컴포넌트에서 Body를 Framing Transposer로, Aim을 POV로 변경해준다.
마우스의 움직임에 따라 카메라가 움직이는 것을 볼 수 있다.
이제 카메라의 각도나 감도를 설정해주자.
Vertical Axis에서 Value Range를 -90 ~ 90으로, Speed를 0.1 as Input Value Gauge로 변경해준다. 카메라의 속도를 지정해주는 것이 아닌 유저의 마우스 입력값을 0.1로 변환해서 사용한다는 의미이다...
Horizontal Axis또한 Value Range, Speed를 아래와 같이 수정해준다.
아까에 비해서 카메라의 감도가 많이 낮아진 것을 확인할 수 있다.
현재 카메라에는 엄청난 문제가 하나 있다.
바로 위와 같이 카메라가 지형을 뚫고 오브젝트에 가려지면 플레이어를 찍지 못한다는 문제이다. 이를 해결해주자.
Virtual Camera의 CinemachineVirtualCamera 컴포넌트에서 Add Extension을 선택하여 Cinemachine Collider를 추가해준다.
그리고 Damping을 0.1로 수정해준다.
이제는 카메라에 충돌체가 추가되었기 때문에 카메라가 지형을 통과하지 못하는 모습을 확인할 수 있다.