요즘 액션 RPG에 필수요소로 자리잡은 지형지물을 뛰어넘는 파쿠르 액션.
4에서 구현할때는 캐릭터에 몸통, 다리, 팔에서 각각 물체를 검사해 검출시 임의로 캐릭터의 애니메이션과 위치값을 조정해 구현했다.
UE5.2로 변경 후 MotionWarping이라는 신규 기능과 더불어 개선한 파쿠르 액션 기능을 만들어 봤다.
5에 들어서 추가된 모션 워핑 기능은 '캐릭터의 루트 모션을 특정 위치에 맞춰 조정해 다양한 액션을 매끄럽게 구현'할 수 있는, 캐릭터의 루트 모션을 타겟 위치에 맞춰 동적으로 정렬해 특정 위치로 이동하며 애니메이션을 재생하는 기능이다.
5.1버전에서 추가된 기능이기 때문에 사용하기 위해선 별도의 플러그인 설치가 필요하다.
애님 노티파이에서 영역을 지정해 사용하기 때문에 몽타주에서의 설정이 필요하다.
모션 워핑은 애니메이션을 재생함과 동시에 메시의 위치를 조정하는 도구일 뿐, 실제로 방해물의 위치 판정, 이동해야 하는 위치 지정과 같은 중요한 작업은 프로그래머가 직접해야한다.
전에 했던 방식은 캐릭터를 기준으로 발, 몸통, 머리, 팔에서 실시간으로 라인 트레이스를 실행해 방해되는 물체의 위치와 높이를 측정, 그에 알맞은 애니메이션을 재생하고 종료와 함께 위치를 강제로 조정하는 방식을 취했다.
당연히 계속 검사를 진행하는 과정에서 과한 부하가 발생하고 애니메이션의 종료 타이밍에 억지로 위치를 조정하는 탓에 일정한 두께의 방해물만 넘어가는 '척' 할 수 있다는 부작용이 있었다.
모션 워핑의 장점은 애니메이션이 재생하는 중, 원하는 타이밍에 캐릭터를 원하는 위치로 옮길 수 있다는 점으로
상시 체크하는 기존 방법에서 액션을 실행 할 때 시작 위치, 캐릭터가 물체 위에 있어야하는 중간 위치, 넘어간 후에 있을 착지 위치 세가지를 측정해 타이밍만 넘겨주는 방식으로 제작했다. 각각의 위치는 장애물에 Sphere, LineTrace를 이용해 체크했다.
이렇게 찾아낸 좌표들을 'FMotionWarpingTarget'이라는 구조체에 워핑이 시작될 노드 이름과 포지션 정보를 저장해 넘겨주고 AddOrUpdateWarpTarget( )에 매개변수로 넘겨주면 모션 워핑이 실행된다.
기존 방식보다 훨씬 간단하고 경제적인 파쿠르가 완성됬다.
다음에 이 방식을 이용해 높이가 높은 방해물, 슬라이딩 등을 구현해보려 한다.
[Unreal] 언리얼 문자 클래스 (0) | 2024.05.09 |
---|---|
[Unreal & C++] 프로젝트 1 (0) | 2024.05.08 |
[C++ 개선] 타겟팅 - 1 (0) | 2024.03.22 |
[C++] 포트폴리오 정보 (0) | 2024.03.22 |