Unreal - 모션워핑(Motion Warping)

2025. 4. 12. 02:10·Unreal5 프로젝트 다이어리

현재 공격하거나 스킬을 사용하면 애니메이션이 나오는데

애니메이션 도중 방향을 꺾을수가없다

그래서 적이 지나갔는데도 애니메이션은 계속 나오니

조작감도 별로고 너무 딱딱한느낌이 든다.

 

이럴때 모션워핑(Motion Warping) 이라는 기능을 사용해보자

모션워핑이란 루트모션을 원하는 방향으로 돌릴수있는 기능을 제공하는 기술이다

원하는 타이밍에 원하는 위치, 방향으로 변경이 가능하다

 

저의 경우 애니메이션을 실행할때 마우스 위치로 원하는 타이밍에 변경이 가능하도록 해보겠다

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

Build.cs 에

MotionWarping을 추가후 generate 합니다

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

루트 모션 활성화 체크해주고

 

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

#include "MotionWarpingComponent.h"를 추가해주고

캐릭터에서

UMotionWarpingComponent를 선언해주고

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

생성자에서 모션워핑컴포넌트를 생성해줍니다

그럼 이제 마우스의 위치를 받아오면됩니다

마우스를 위치를 받아와서 그 방향으로 회전할껀데

 

모션워핑을 사용해서 회전을 하면 원래 애니메이션이 이동하는 애니메이션인데

모션워핑을 사용해서 회전을 강제로 틀어버리면 이동을 하지않습니다

그래서 앞으로 이동도 해주고 회전도 해줄생각입니다

 

그런데 앞으로 이동하는게 앞에 물체가있으면 이동을 하지않고 물체가 없으면 이동을 하게 하는 방식이 좋다고판단했고

캐릭터 앞에 캡슐트레이스(라인트레이서보다 굵음)을 쏴서 물체를 확인하고

물체가 없으면 전진 있으면 자리유지 방식으로 해보겠습니다

 

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

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

맞은게있다면 움직이고 없으면 이동하지않습니다

FTransform은 FRotator값이 아닌 quaternion값으로 나오므로 .Quaternion을 붙혀서 계산해줍니다

저희는 pitch와 roll은 변경하지않고 좌우 yaw값만 변경할테니 pitch 와 roll은 0으로 고정해줍니다

이거 안하면 원래 스폰하는 액터들의 좌표가 틀어질수있습니다 

 

그럼 이제 이 구한 targetTransform을 모션워핑값으로 넘겨주면됩니다

모션워핑컴포넌트에 AddOrUpdateWarpTargetFromTransform으로 값을 넘길수있습니다

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
'Unreal5 프로젝트 다이어리' 카테고리의 다른 글
  • Unreal - 공중 공격 - (2)
  • Unreal - 공중 공격 - (1)
  • Unreal - 넉백 날려보내기
  • Unreal - 캐릭터 광역공격 만들기
lucodev
lucodev
커피와 노트북 그리고 개발
  • lucodev
    루코 개발테이블
    lucodev
  • 전체
    오늘
    어제
    • 분류 전체보기 (173) N
      • Unreal5 프로젝트 다이어리 (73)
      • Unreal5 프로젝트 다이어리2 (11)
      • Unreal 팁 (8)
      • Unreal 디버깅 (8)
      • 코드 개인보관함 (8)
      • C++ 프로그래머스 다이어리 (50) N
        • Stack,Queue (6)
        • Hash (4)
        • Heap (2)
        • Sort (5)
        • Exhaustive search (5)
        • Greedy (2)
        • BFS , DFS (6)
        • Graph (2)
        • Dynamic Programming (1)
        • C++ Math (2)
        • 기타 문제 (14) N
      • 코딩테스트+@ (11) N
      • 알고리즘 스타디 (1)
      • 알고리즘 스타디 과제 (3)
  • 인기 글

  • 최근 글

  • 최근 댓글

  • 링크

  • 공지사항

  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 태그

    언리얼 페이드 아웃
    unreal 로딩
    언리얼 motionmatching
    언리얼 모션매칭
    unreal loading
    언리얼 시퀀스
    언리얼 로딩창
    언리얼 로딩
    언리얼
    unreal 모션매칭
    unreal sequence
    언리얼 look at
    언리얼 컷씬
    언리얼 foot step
    언리얼 behaviortree
    언리얼 비헤이비어트리
    언리얼 behavior tree
    unreal 시퀀스
    unreal look at
    unreal 컷씬
  • hELLO· Designed By정상우.v4.10.3
lucodev
Unreal - 모션워핑(Motion Warping)
상단으로

티스토리툴바