이전에 구현했던 Warp의 스킬로 원활한 순간이동 위치 지정을 위해 카메라의 TopView 시점 변환을 구현해보았다.
✨ SubAction_Warp

시점을 변경할 Camera Class인 ACameraActor를 저장해주었고, 카메라의 ProjectionMode 설정 값을 변수로 선언해주었다.
Projection은 그래픽스 파이프라인 단계 중 Vertex Shader 단계에서 수행되는 투영변환 작업이다.
Projection Mode의 종류로는 원근투영인 Perspective와, 직교투영인 Orthographic 가 있다.
자세한 설명은 아래 게시글에서 추가로 확인할 수 있다.
📷 Perspective (원근투영)

📷 Orthographic (직교투영)

Player 카메라의 Projection Mode를 각각 변경시켜보면 원근투영과 직교투영의 차이점을 명확히 확인할 수 있다.
Perspective(원근투영)은 사물에 대한 원근감과 공간감을 잘 표현하여 보여주고, Orthographic(직교투영)은 사물에 대한 원근감과 공간감을 없이 표현하여 보여준다. 따라서 2D나 2.5D를 제작할 때는 직교투영을 사용하여 게임을 제작한다.

이후, Camera Component의 속성값으로 초기화되는 변수들을 선언하였다.
✨ SubAction_Warp :: BeginPlay

시점변환이 시작되는 BeginPlay 함수에서는 PlayerController를 가져온 뒤, 시점을 변환시킬 새로운 Camera Actor를 찾아왔다.
이후, TopView를 구현해야 하므로 카메라의 방향을 Pitch값 -90만큼 낮춰 하늘에서 땅 방향을 바라보도록 조정하였다.
이후, Camera Component의 설정값을 미리 선언해둔 변수로 각각 초기화 해 주었다.
✨ SubAction_Warp :: Pressed / Released

SubAction 입력키를 누르는 순간(Pressed) StateComponent의 상태를 SubActionMode로 설정하고, Movement Component의 TopViewCamera를 활성화시켰다. 이후, PlayerController의 SetViewTargetWithBlend 함수로 Camera를 변경해주며 시점을 전환해주었다.
입력키를 떼는 Released 순간에는 SubActionMode를 종료하고, TopViewCamera도 비활성화시켰다. PlayerController의 View는 다시 플레이어인 Owner로 설정하여 원래의 시점으로 돌아오도록 구현하였다.
✨ Movement Component

Movement Component의 Enable/Disable TopViewCamera 함수를 사용하면 컴포넌트에 존재하는 bTopViewCamera 변수를 각각 전환시켜준다.

이렇게 설정된 bTopViewCamera 변수에 따라 캐릭터가 OnMoveForward 할때나 OnMoveRight할 때의 방향값을 각각 XAxis, YAxis로 변경해주었다.

만들어진 CSubAction_Warp 클래스를 블루프린트로 생성한 뒤, 직렬화했던 변수들을 원하는 값으로 조정해주었다.

최종적으로 Warp의 DataAsset에 SubActionClass를 만든 BP_CSubAction_Warp로 설정해주었다.
프로그램을 실행시켜보면 아래와 같이 SubAction 키를 눌렀을 때 TopView로 시점이 변환되면서 성공적인 Warp 기능이 수행되는 것을 확인할 수 있었다.
