본문 바로가기
공부/Unreal Engine 5

[언리얼5] 모션워핑(Motion Warping)

by MY블로그 2023. 12. 30.

몬스터가 플레이어를 공격하는 몽타주를 재생할때에 정확히 플레이어 향향을 향하지 않는 것을 해결하기 위한 기능 입니다.

 

모션워핑 적용 전의 몬스터는 플레이어를 정면으로 향하지않으며 범위내에있을때 무조건 몽타주를 재생합니다.

때문에 루트모션 애니메이션의경우 단순히 애니메이션이 재생될뿐 플레이어를 방향으로 향하지 않으므로 플레이어가 아닌 루트모션의 방향그대로 공격을 하는 모습을 볼 수 있습니다.

모션워핑이 적용된 전의 몬스터 공격 영상

 

1. 플러그인 설치하기

모션워핑을 사용하기위한 플러그인을 설치하도록 합니다.

편집 > 플러그인 > Motion Warping 체크 > 처음설치시 엔진 재시작필요

 

2. 모션워핑 컴포넌트 추가하기

모션워핑을 적용시킬 블루프린트 클래스에서 컴포넌트 > 추가 > Motion Warping 으로 모션워핑 컴포넌트를 추가해 주도록 합니다. 추가 후 잊지않고 컴파일 및 저장을 꼭 해주도록 합니다.

 

3. 노티파이 추가하기

모션워핑을 적용시킬 애니메이션(루트모션)몽타주에서 노티파이를 추가할 수 있습니다.

플러그인이 정상적으로 설치되었다면 노티파이 트랙의 라인에서 우클릭 > 노티파이스테이트 추가 > Motion Warping 메뉴가 선택이 가능하게 됩니다.

 

노티파이를 추가한 직후에는 아래와같이 구간이 매우 좁은 영역으로 생성됩니다. 영역을 확대 후 필요한 루트모션 애니매이션의 영역만큼 확장 시켜 주도록 합니다. 개인적으로 몬스터가 지면에서 발이 떨어진 순간부터 공중에 체공하고 있는 순간의 모든 영역 부분을 모션워핑 구간으로 지정 하였습니다.

 

Tip. 시작부분을 지정하고 끝부분을 지정할때에 모션워핑의 끝부분을 클릭하면서 SHIFT 키를 누른채로 이동시키면 애니메이션 프레임을 동시에 볼 수 있습니다.

 

4. 모션워핑 디테일 설정

노티파이(모션워핑)을 선택한 상태에서 우측 디테일창의 Root Motion Modifier 메뉴를 Skew Warp 으로 지정합니다.

해당 메뉴로 지정시 Warp 타겟의 이름을 설정 할 수 있습니다.

기본설정은 크게 바꾸지 않고 사용할 것이지만 Rotation Type은 Default가 아닌 Facing으로 사용할 예정입니다.

Skew Warp으로 지정후 메뉴를 확장시켜 디테일 설정을 하도록 합니다.

 

5. 워핑 타겟 지정하기

몽타주에서 모션워핑 구간의 설정을 마친 다음 해당 몽타주를 사용하는 블루프린트의 이벤트 그래프에서 커스텀 이벤트를 만들어 타겟을 지정해 주도록 합니다.

 

우선 블루프린트에서 커스텀이벤트를 사용하여 이벤트를 생성해 주도록 합니다. 생성후 모션워핑컴포넌트를 통하여 Add or Update Warp Target from Transform 함수를 실행시킬 수 있도록 연결 시켜 줍니다.

 

다음으로는 해당 블루프린트의 부모클래스(저는 CPP를 통하여 블루프린트를 생성)에서 상세한 설정을 합니다.

클래스의 헤더에 CombatTarget 으로 지정할 변수를 만들어 주도록 합니다.

이때 주의해야할 점은 프로퍼티가 블루프린트에서 읽을수 있어야 하기 때문에 프로텍티드 구간에 선언하고 매크로 지정을 해주도록 하겠습니다.

변수의 선언이 완료되었다면 저장후 컴파일하여 엔진을 실행하도록 합니다.

이벤트 그래프에서 선언된 변수를 Get으로가져온뒤 해당변수를 우클릭하여 검증된 Get 으로 변환후 타깃의 트랜스폼을 연결해 주도록 합니다.

연결 한 뒤에 Warp Target Name을 노티파이에서 설정했던 이름과 꼭 일치시켜 주도록 합니다.

 

6. 커스텀이벤트 호출 노티파이 생성 및 바인딩

모션워핑구간을 적용한 몽타주에서 커스텀이벤트(SetwarpTarget)을 실행시킬수있는 노티파이를 생성하고 해당 노티파이가 호출되었을때 함수가 실행될 수 있도록 애니메이션 블루프린트의 이벤트 그래프에서 바인딩을 진행합니다. 

여기서 주의할점은 모션워핑 구간내에서 타겟의 위치정보를 갱신시킬 구간(프레임)을 적절히 배치해야 합니다.

 

주의. 해당 노티파이는 모션워핑구간내에서 여러번 호출할경우 몬스터가 너무 부자연 스럽게 플레이에 붙어 피할수 없는 공격을 받게 됩니다. 따라서 공격이 시작되는 순간 한번만 타겟의 위치를 갱신시켜주는것이 좋지 않을 까생각합니다.

공격이 시작되는 부분에만 노티파이를 호출 하도록 하였습니다.

 

결과

모션워핑 적용후에는 몬스터가 루트모션공격을 진행하더라도 플레이어가 없는 위치를 향하여 공격하지 않는 것을 확인할 수 있습니다.

 

모션워핑이 적용된 후의 몬스터 공격 영상

 

댓글