언리얼 엔진 5/개발 일지

[UE5] 블루아카이브 TPS게임 개발일지 (1) - 조준 기능 구현

ciel45 2023. 12. 1. 22:41

개발 일지의 첫번째이지만 사실 이미 어느정도 진행이 되어있는 상태이다.

(27일 전에 시작)

 

 

 

현재 완료 사항:

  1. 캐릭터의 움직임과 카메라 회전
  2. 아이템 획득 기능
  3. 추락 및 착지 애니메이션

사실 해당 사항들 대부분은 언리얼 엔진 5의 Third Person 템플릿에 이미 만들어져있으므로, 혹시 본 개발일지를 참고하여 언리얼 엔진 5 개발을 시작하실 분들이 계시다면 해당 템플릿을 사용하면 될 것 같다.

 

 

제목이 조준 기능 구현이지만, 사실 이미 다른 방식으로 구현한 바가 있다. Input Action의 Trigger가 Hold일 경우 해당 인풋이 들어오는 동안은 매 틱마다 콜백 함수를 호출한다는 점을 이용해 Tick 함수에서의 애니메이션 구현처럼 만들어놓았다.

유니티였다면 Dotween 라이브러리나 Lerp 함수를 썼겠지만, 언리얼에서는 그러한 것들에 대해 아직 제대로 파악이 되지 않아 우선 기본적인 방식으로 해보았다.

 

조준에 해당하는 Input Action IA_Aim의 인풋 타입은 bool로, Input Mapping Context에서는 Trigger를 Hold로 해놓은 상태이다.

 

Aim함수는 의도한 대로 동작하여 부드럽게 조준이 되었다. 그러나, ReleaseAim함수는 마우스 오른쪽을 뗄 때 단 한 번만 호출되는 함수였기 때문에, 여러번 호출되게 하기 난감한 면이 있었다.

불가능할 것은 없지만 코드가 지저분해질 것 같아 고민하던 중, 유튜브에서 Timeline을 사용하는 영상을 보고, 따라해보았다.

캐릭터의 이벤트 그래프이다. Aim 인풋액션이 트리거되면, 타임라인의 애니메이션이 수행된다. 버튼을 떼면 카메라가 원위치 되는 것도 이미 'Reverse' 노드를 통해 잘 구현이 되어있었다.
해당 Timeline 노드의 내부이다. 애니메이션 키 그래프와 같은 형태로, 현재 구간이 워낙 짧아 마치 없는 것 처럼 보이지만, 0.1초의 시간을 통해 스프링암의 Target Arm Lengh, Socket Offset을 조정하도록 하였다.

 

 

이러한 방식을 통해 마우스를 뗐을 때 자연스럽게 줌아웃 되도록 만들 수 있었다.

 

추후에 블루프린트 노드를 C++코드로 변경할 계획이다.

 

 

 

 

 

 

앞으로 할 일은 다음과 같다.

 

 

  • 조준하면서 하체도 걸을 수 있는 애니메이션 제작
  • 조준한 채 시점을 돌릴 수 있는 Aim Offset 제작