현재 공격하거나 스킬을 사용하면 애니메이션이 나오는데
애니메이션 도중 방향을 꺾을수가없다

그래서 적이 지나갔는데도 애니메이션은 계속 나오니
조작감도 별로고 너무 딱딱한느낌이 든다.
이럴때 모션워핑(Motion Warping) 이라는 기능을 사용해보자
모션워핑이란 루트모션을 원하는 방향으로 돌릴수있는 기능을 제공하는 기술이다
원하는 타이밍에 원하는 위치, 방향으로 변경이 가능하다
저의 경우 애니메이션을 실행할때 마우스 위치로 원하는 타이밍에 변경이 가능하도록 해보겠다

편집 > 플러그인 > Motion Warping 설치후 엔진 재시작
Build.cs 에

MotionWarping을 추가후 generate 합니다
그리고 해당 애니메이션은 루트모션활성화가 무조건 켜져있어야 모션워핑이 작동하는 원리

모션 워핑을 적용하고자 하는 대상은 모션 워핑 컴포넌트를 소유하고있어야함

#include "MotionWarpingComponent.h"를 추가해주고
캐릭터에서

UMotionWarpingComponent를 선언해주고
마우스 위치를 받아와서 모션워핑에 값을 넘겨줄 함수를 만듭니다

그럼 이제 마우스의 위치를 받아오면됩니다
마우스를 위치를 받아와서 그 방향으로 회전할껀데
모션워핑을 사용해서 회전을 하면 원래 애니메이션이 이동하는 애니메이션인데
모션워핑을 사용해서 회전을 강제로 틀어버리면 이동을 하지않습니다
그래서 앞으로 이동도 해주고 회전도 해줄생각입니다
그런데 앞으로 이동하는게 앞에 물체가있으면 이동을 하지않고 물체가 없으면 이동을 하게 하는 방식이 좋다고판단했고
캐릭터 앞에 캡슐트레이스(라인트레이서보다 굵음)을 쏴서 물체를 확인하고
물체가 없으면 전진 있으면 자리유지 방식으로 해보겠습니다

마우스 클릭한곳의 위치를 구하는 코드입니다

스피어 트레이스를 쏘는 코드입니다 스피어트레이스를 쏴서 체크합니다


FTransform은 FRotator값이 아닌 quaternion값으로 나오므로 .Quaternion을 붙혀서 계산해줍니다
저희는 pitch와 roll은 변경하지않고 좌우 yaw값만 변경할테니 pitch 와 roll은 0으로 고정해줍니다
이거 안하면 원래 스폰하는 액터들의 좌표가 틀어질수있습니다
그럼 이제 이 구한 targetTransform을 모션워핑값으로 넘겨주면됩니다

Target이라는곳에 targetTransform값을 넣어줄수있습니다
+(만약 원하는 방향과 위치가 있다면 그 위치를 넣어주면됩니다)


회전을 원하는 애니메이션에 모션워핑을 추가해줍니다

그리고 디테일창 워프 타깃 이름을 아까 넘겨준 Target으로 변경해줍니다

마지막으로 애니메이션을 실행하는곳 위에 해당 함수를 실행시켜줍니다
그러면 애니메이션이 실행될때 모션워핑에서 받은 값들이 Target에 있으니 그 위치로 회전을 합니다

+ 노티파이에서 사용해도됩니다

전체코드


'Unreal5 프로젝트 다이어리' 카테고리의 다른 글
| Unreal - 공중 공격 - (2) (0) | 2025.04.20 |
|---|---|
| Unreal - 공중 공격 - (1) (0) | 2025.04.15 |
| Unreal - 넉백 날려보내기 (0) | 2025.04.11 |
| Unreal - 캐릭터 광역공격 만들기 (0) | 2025.04.11 |
| Unreal - DataTable로 스탯 관리하기 (0) | 2025.04.11 |