▪ Unreal Engine

[UE4] Camera Pawn 으로 줌인 / 줌아웃 및 카메라 전환 기능 구현하기

maay 2022. 6. 5. 06:01

언리얼로 게임을 만들던 중, 휠로 카메라를 줌 인 / 줌 아웃 하는 기능이 필요해졌다.

게임의 기본 상태는 레벨의 랜드스케이프가 한눈에 들어오게끔 했지만, 원한다면 더 가까이 보거나 시점 카메라를 변경할 수 있도록 구현해 볼 것이다.


대부분의 튜토리얼은 Thirdpersoncharacter의 컴포넌트 카메라를 확대함으로써 조준을 하거나, 캐릭터를 조금 더 크게 볼 수 있도록 하는 방식이었다.

하지만 이 게임에는 따로 캐릭터가 존재하지 않고 내가 원하는 것은 게임 레벨 안에 배치 된 카메라가 곧 플레이어가 되는 것이었기 때문에 카메라 폰을 만들어 사용하기로 했다.



구현 과정


게임의 메인 레벨에 생성한 랜드스케이프.

위 사진과 같이 아래로 내려다보는 시점을 시점1로 하였고 이 상태에서 휠 업 / 휠 다운을 하면 줌인아웃이 되도록 블루프린트를 작성해볼 것이다.

그리고 다른 카메라로 시점 2를 추가해 숫자 키를 누르면 전환되도록 하는 것이 목표이다.



  • Camera Pawn 생성



    우선 Pawn을 선택한 이유는, 플레이어 컨트롤러로부터 input을 받을 수 있으며 (휠 업, 휠 다운) possess가 되기 때문.

    (처음엔 어떤 걸 써야할 지 몰라서 카메라 액터, 캐릭터를 다 생성해서 써봤는데 그 차이를 확실히 느낄 수 있었다. 확실히 설명을 읽는 것보다 직접 써보는 게 답이 나오는 것 같다.)



Pawn Component의 Scene에 Spring Arm, 그리고 그 Spring Arm에 카메라를 추가해준다.



그럼 이런 형태가 되는데, Spring Arm은 단어 그대로에서 느낄 수 있듯 카메라와 거리가 늘었다 줄었다 할 수 있는 팔이라고 이해하면 쉽다.

스프링 암을 이용하면 카메라를 이동 제어 할 수 있게 된다.




  • 블루프린트 작성 (카메라의 Scroll zoom)


그리고 이벤트 그래프에 위와 같이 블루프린트를 작성해주었다.

Min FOV (Minimum Field of View) 와 Max FOV (Maximum Field of View) 라는 float형 변수를 만들어준 뒤

아까 추가해주었던 카메라의 FOV 값을 가져와 비교해 더하거나 빼주는 로직이다.

Min FOV 값과 Max FOV 값을 변화시키면 확대 / 축소되는 정도 조절할 수 있다.

또한 더하거나 빼는 값을 3이 아닌 더 작은 값으로 바꾸어 준다면 최대로 확대 / 축소 시키기 위해 휠을 더 많이 돌려야 할 것이다.




  • 두 번째 카메라 생성 / 카메라 배치


처음에 만들었던 카메라를 간단히 하나 더 복제해서 사용하기로 하였다.




월드에 카메라 두개를 배치하고 원하는 시점에 맞게 위치와 방향을 조절해준다




  • 블루프린트 작성 (카메라 변환)

레벨 블루프린트 안에 위와 같이 블루프린트를 작성했다.

숫자 키 1 로는 CameraOne, 2로는 CameraTwo로 전환할 수 있다. (플레이어 컨트롤러를 가져와서 각 카메라 폰에 Possess)

만약 꾹 누르고 있어야하고 키를 떼면 다시 돌아오는 기능을 구현하고 싶다면 노드의 Released 부분을 활용하면 되고,

키 하나로 카메라 1-2 전환을 모두 하고싶다면



이렇게 Flip Flop을 활용하면 될 것이다.




  • 결과


    Pawn의 Possess Player 설정을 잊지 않고 해준다.



이렇게 카메라가 플레이어의 시점이 되고, 마우스의 스크롤을 사용해 줌인 / 줌아웃을 할 수 있게 된다


그리고 카메라 전환을 위해 숫자 2 키를 누르면



Possess하고 있는 폰 카메라가 전환되고 기능이 같기 때문에 휠 사용을 이용한 줌도 가능하다.

실제로는 이것보다 부드러우나 gif의 크기 문제로 프레임 수를 줄이면서 조금은 끊기는 듯 보이게 됐다.



이걸 응용하면 정말 다양한 걸 만들 수 있을 것 같다. 당장 생각나는 건 게임 속 CCTV 나 망원경, RTS 게임의 카메라 컨트롤 정도인데 ..

이렇게 하나하나 배워가는 게 머릿속에서 자연스럽게 활용방법과 연결되는 점이 재미있다.




참고자료

Using Spring Arm Components | Unreal Engine Documentation

Player-Controlled Cameras | Unreal Engine Documentation