Programing/Unity(C#)

[Unity] Cinemachine에서 3D 카메라의 범위 설정하기(Projection: Perspective)

hye3193 2024. 8. 7. 18:37

이전 글(https://hye3193.tistory.com/154)에서 Cinemachine을 이용해서 카메라가 플레이어를 따라오고, 맵의 바깥쪽을 비추지 않도록 Bound를 설정해 주는 작업을 하였다

 

그런데 2D 게임이지만, 원근감을 위해 3D 카메라를 사용할 경우 설정을 변경해주어야 하는 부분이 있다

 

우선 main camera의 투시(projection)을 perspective로 변경해 준다

 

unity에서 카메라 투사에는 두 종류가 있는데, 하나는 orthographic으로, 일반적인 2D 같은 투사 방식이고, 다른 하나는 perspecitve로, 3D처럼 원근감이 적용되는 투사 방식이다

 

프로젝트를 생성할 때 2D를 선택했냐 3D를 선택했냐에 따라 기본적으로 설정된 투사 방식에 차이가 있지만, 유니티에서는 처음 시작할 때 2D를 선택했다고 해서 3D 게임을 만들 수 없는 게 아니기 때문에 그냥 설정만 변경해 주면 된다

 

그리고 이전에 Virtual Camera 오브젝트에 있었던 CinemachineConfiner2D 컴포넌트를 제거해 주고, Add Extension을 이용해 CinemachineConfiner를 추가해 준다

 

Confine Mode가 Confine 3D로 되어 있는지 확인해 준다

 

그리고 Bounding Volume에 Collider를 넣으면 되는데 

Camera.main.transform.GetChild(0).GetComponent<CinemachineConfiner>().m_BoundingVolume = {Collider 컴포넌트}

마찬가지로 드래그 앤 드롭 해 줘도 되고, 코드로 위와 같이 넣을 수도 있다

(나의 경우 Virtual Camera를 Main 카메라의 자식에 넣어뒀기 때문에 위치가 저렇지만, 만일 Main 카메라와 Virtual Camera가 별개로 존재한다면 그냥 Virtual Camera를 찾아서 설정을 변경해 주면 된다)

 

이 때 Bounding Volume은 Bounding Shape 2D와 다르게 Box Collider 등 다른 Collider도 사용 가능하다

물론 2D 콜라이더가 아닌 일반 콜라이더로 넣어주어야 하고, Box Collider를 사용해서 넣을 경우, 2D로 보이지만 카메라는 3D 상에서 움직이기 때문에 z축 길이도 신경써서 Collider를 설정해 주어야 한다

그렇지 않으면 z축 방향으로 충분히 뒤로 가서 찍을 수가 없기 때문에 카메라가 너무 확대되어 보일 것

 

참고로 3D 환경에서는 2D와 다르게 Bound에 카메라 중앙이 걸리는 식으로 경계가 잡히기 때문에 고려해서 Collider 범위를 설정해 주어야 한다(초록색 선이 Bound)

(* 사진에서는 Cinemachine 카메라가 플레이어를 따라 일시적으로 Bound 바깥쪽으로 나가는 것처럼 보이지만, 실제 카메라는 하얀색 아이콘이 가르키는 위치를 송출하고 있기 때문에 신경 쓰지 않아도 된다)