모션 워핑(Motion Warping) 은 캐릭터의 루트 모션이 타깃과 일치하도록 동적으로 정렬하는 기능입니다. 이 문서에서는 모션 워핑 로직을 캐릭터 블루프린트에서 생성하고, 모션 워핑 기간을 애니메이션 몽타주 내에서 할당하고, 이를 명명된 위치로 링크하는 방법을 알아봅니다.
전제조건
모션 워핑 플러그인을 활성화해야 합니다. 플러그인 및 설치 방법에 대한 상세 정보는 다음을 참조하세요. 플러그인으로 작업하기.
모션 워핑은 블루프린트(Blueprint) 및 애니메이션 몽타주(Animation Montage) 워크플로를 사용합니다. 따라서 이러한 기능을 파악하고 있어야 합니다.
프로젝트에 게임플레이 샘플을 제작할 캐릭터 블루프린트(Character Blueprint), 입력 컨트롤(Input Controls), 애니메이션(Animations)이 있어야 합니다.
모션 워핑 개요
모션 워핑의 전체 기능은 두 가지 주요 영역으로 나눌 수 있습니다.
애니메이션 몽타주(Animation Montage) 에서는 애님 노티파이 스테이트(Anim Notify States)로 모션 워핑 창을 생성합니다.
블루프린트 로직(Blueprint Logic) 에서는 워프 타깃을 할당하고 몽타주를 재생하는 로직을 구성합니다.
애니메이션 몽타주
애니메이션 몽타주에서는 모션 워핑 영역을 지정하고, 행동을 커스터마이징하고 명명합니다.
생성
새 모션 워핑 영역을 생성하려면 노티파이 트랙 중 하나를 우클릭하고 노티파이 스테이트 추가(Add Notify State...) > 모션 워핑(Motion Warping) 을 선택합니다.
이는 커스터마이징 가능 영역으로, 워핑이 가장 잘 적용되는 애니메이션 영역에 맞춰 시작 및 종료 시간을 정렬할 수 있습니다.
예를 들어 이 짚고 뛰어넘는 몽타주에서는 캐릭터가 장애물에 손을 대는 순간 시작 워프 영역에 해당 영역이 들어가 있어야 할 것입니다.
디테일
애님 노티파이(Anim Notify) 의 디테일(Details) 패널에는 모션 워핑이 작동하는 데 필요한 프로퍼티와 세팅이 있습니다. 모션 워핑 섹션을 선택하면 다음과 같은 디테일이 표시됩니다.
디테일 이름 |
설명 |
---|---|
루트 모션 모디파이어(Root Motion Modifier) |
지정할 모션 워핑 타입입니다. 스케일(Scale): 애니메이션의 스케일을 균등한 방식으로 변경하는 모션 워프입니다. 왜곡 워프(Skew Warp): 게임 오브젝트의 루트 모션을 워프시켜서 레벨에서 애니메이션의 위치 및 회전이 워핑 기간 끝에 일치하게 합니다. |
워프 타깃 이름(Warp Target Name) |
이 워프 타깃을 찾기 위한 이름입니다. 워프 타깃 추가 또는 업데이트(Add or Update Warp Target) 블루프린트 노드와 연관성이 있습니다. |
워프 포인트 애님 제공자(Warp Point Anim Provider) |
워프 포인트(Warp Point) 에 필요한 제공자를 선택합니다. 없음(None) : 워프 포인트 제공자를 선언하지 않습니다. 스태틱(Static) : 사용자 정의 파라미터 트랜스폼에 의해 워프 포인트가 정의됩니다. 워핑 노티파이 자체를 통해 선언될 수 있습니다. 본(Bone) : 워프 포인트가 본에 의해 정의됩니다. |
워프 포인트 애님 트랜스폼(Warp Point Anim Transform) |
애니메이션 워프 포인트를 변환합니다. 워프 포인트 애님 제공자 가 스태틱(Static) 으로 설정된 경우에만 관련이 있습니다. |
워프 포인트 애님 본 이름(Warp Point Anim Bone Name) |
워프 포인트로 타깃을 설정할 본 이름을 선언합니다. 워프 포인트 애님 제공자 가 본(Bone) 으로 설정된 경우에만 관련이 있습니다. |
워프 이동(Warp Translation) |
루트 모션의 이동 컴포넌트를 워프시킬지 여부입니다. |
Z축 무시(Ignore ZAxis) |
이동의 Z 컴포넌트를 워프시킬지 여부입니다. |
워프 회전(Warp Rotation) |
루트 모션의 회전 컴포넌트를 워프시킬지 여부입니다. |
회전 타입(Rotation Type) |
회전이 워프하여 워프 타깃의 회전과 일치할지, 워프 타깃을 마주볼지 결정합니다. 디폴트(Default) : 캐릭터가 워프 타깃의 회전과 일치하도록 회전합니다. 페이싱(Facing) : 캐릭터가 워프 타깃을 마주보도록 회전합니다. |
워프 회전 시간 배수(Warp Rotation Time Multiplier) |
회전이 얼마나 빠르게 워프되는지를 설정합니다. 예를 들어 모션 워핑 기간이 2초 지속될 때 이 프로퍼티를 0.5로 설정하면 최종 회전은 1초만에 이뤄집니다. |
노티파이 컬러(Notify Color) |
모션 워핑 노티파이 키프레임의 색을 설정합니다. |
블루프린트
블루프린트는 모션 워핑 컴포넌트(Motion Warping component)를 추가하고, 워프 발생을 트리거하고, 워프 타깃을 지정하는 데 사용됩니다.
모션 워핑 컴포넌트
블루프린트에 모션 워핑 컴포넌트를 추가해야 모션 워핑 행동을 활성화할 수 있습니다. 그렇게 하려면 컴포넌트(Components) 패널에서 (+) 추가 를 클릭하고 무브먼트(Movement) 카테고리 아래에서 모션 워핑(Motion Warping) 을 찾습니다. 클릭하여 추가합니다.
이제 블루프린트 그래프의 컴포넌트 패널에서 이벤트 그래프(Event Graph) 로 드래그 앤 드롭하면 해당 컴포넌트가 레퍼런스될 수 있습니다.
노드
모션 워핑 레퍼런스에서 링크를 드래그하면 관련된 함수 및 이벤트를 둘러볼 수 있습니다. 이는 모션 워핑 카테고리 내에 위치해 있습니다.
블루프린트에서 사용 가능한 모션 워핑 노드는 다음과 같습니다.
노드 이름 |
노드 이미지 |
설명 |
---|---|---|
워프 타깃 추가 또는 업데이트(Add or Update Warp Target) |
|
이 노드는 몽타주 에셋에서 정의된 워프 타깃 이름을 위치로 링크하는 데 사용됩니다. 워프 타깃(Warp Target) 핀을 우클릭하고 구조체 분할 핀(Split Struct Pin) 을 선택하여 이동 및 회전 핀으로 분할할 수 있습니다. 반대로 워프 타깃 제거(Remove Warp Target) 노드를 사용하여 워프 타깃 이름(Warp Target Name) 의 링크를 해제할 수도 있습니다. |
루트 모션 모디파이어 왜곡 워프 추가(Add Root Motion Modifier Skew Warp) |
|
몽타주 에셋에서 왜곡 워프 애님 노티파이(Skew Warp Anim Notifies) 를 추가하는 대신 이 노드를 사용하여 블루프린트로 새 모션 워핑 기간을 생성할 수 있습니다. 이 모션 워핑 기간 세팅은 여기서도 할당할 수 있으며, 여기에는 시작 시간 , 종료 시간 , 워프 타깃 이름 등이 있습니다. 또한 스케일을 위한 루트 모션 모디파이어 추가(Add Root Motion Modifier for Scale) 노드와 모든 루트 모션 모디파이어 비활성화 노드도 사용 가능합니다. |
모션 워핑 예시
이 섹션에서는 타깃에 펀치를 날리려고 워핑되는 캐릭터를 통해 간단한 모션 워핑 예시를 구성하는 방법을 알아봅니다.
워핑 비활성화됨
시작하기 전에 사용할 애니메이션에서 루트 모션이 활성화됐는지 확인합니다. 그러려면 애니메이션 에셋을 열고 루트 모션 활성화(EnableRootMotion) 를 활성화합니다.
타깃 위치 구성
첫 번째 단계는 워프할 타깃을 생성하고 위치를 지정하는 것입니다. 이 예시에서는 원기둥을 사용합니다.
액터 배치(Place Actors) 패널에서 모든 클래스(All Classes) 를 클릭하고 타깃 포인트(Target Point) 를 찾습니다. 레벨로 드래그 앤 드롭하여 타깃 포인트를 추가합니다. 원하는 워프 포인트에 맞게 정렬되고 회전되었는지 확인합니다.
애니메이션 몽타주 구성하기
다음으로 애니메이션 몽타주 에셋을 생성합니다. 기존 애니메이션에서 파생되는 몽타주 에셋을 쉽게 생성하려면 애니메이션 에셋을 우클릭하고 생성 > 애님몽타주 생성(Create AnimMontage) 을 선택하면 됩니다. 몽타주를 생성한 다음 에셋을 엽니다.
몽타주가 열린 상태로 시퀀스를 스크럽하여 애니메이션을 프리뷰합니다. 다음 단계는 모션 워핑 기간을 노티파이 트랙 아래에 추가하는 것입니다. 그렇게 하려면 트랙 영역을 우클릭하고 노티파이 스테이트 추가 > 모션 워핑 을 선택합니다.
모션 워핑 기간이 시작 및 종료 범위를 설정 가능한 핸들과 함께 생성됩니다.
모션 워핑 기간의 범위가 애니메이션 시작 부근에서 시작되고 캐릭터가 타격한 순간 종료하도록 설정합니다. Shift 를 누른 채로 노티파이 키프레임을 움직여서 해당 시간의 현재 애니메이션을 프리뷰할 수도 있습니다.
다음으로 모션 워핑 키프레임을 선택하고 디테일 패널로 이동합니다. 여기서 이 키프레임의 프로퍼티를 설정합니다.
루트 모션 모디파이어 구성(Root Motion Modifier Config) 을 왜곡 워프 로 설정합니다. 이는 워프 타입을 지정하기 위한 것입니다.
워프 타깃 이름 에 이름을 설정합니다. 이는 워프를 이름으로 식별하기 위한 것입니다.
타깃 위치 구하기
이제 캐릭터 블루프린트 에셋을 엽니다. 이벤트 그래프에서 원하는 입력 액션에 매핑된 입력 액션(Input Action) 노드를 생성합니다. 그렇게 하려면 그래프에서 우클릭하고 입력(Input) > 액션 이벤트(Action Events) 에서 입력 이벤트를 선택합니다.
이 예시에서는 펀치(Punch) 입력 액션 이벤트가 있습니다.
다음으로 앞서 이 예시에 배치한 타깃 포인트의 위치를 구해야 합니다. 그러려면 몇 가지 방법이 있지만, 이 예시에서는 클래스의 모든 액터 구하기(Get All Actors of Class) 노드를 생성합니다. 액터 클래스(Actor Class) 를 타깃 포인트(Target Point) 로 설정합니다. 마지막으로 눌렀을 때(Pressed) 출력 핀을 입력 액션 노드에서 클래스의 모든 액터 구하기 함수의 입력 액션 핀에 연결합니다.
마지막으로 구하기(Get) (사본) 노드를 추가하여 출력 액터(Out Actors) 배열 데이터 핀에 연결합니다. 또한 액터 위치 구하기(Get Actor Location) 함수를 추가하고 이 함수의 입력 타깃 데이터 핀을 출력 데이터 핀의 구하기 노드에 연결합니다.
워프 타깃
이제 타깃 포인트의 위치를 구하는 로직을 만듭니다.
먼저 모션 워핑 컴포넌트를 캐릭터 블루프린트에 추가합니다. 그렇게 하려면 컴포넌트 패널에서 추가 (+) 를 클릭하고 무브먼트 카테고리 아래에서 모션 워핑을 찾습니다. 클릭하여 컴포넌트를 추가합니다.
다음으로 모션 워핑 컴포넌트를 컴포넌트 패널에서 이벤트 그래프로 드래그 앤 드롭합니다.
모션 워핑 레퍼런스 핀에서 드래그하여 트랜스폼에서 워프 타깃 추가 또는 업데이트(Add or Update Warp Target from Transform) 노드를 추가합니다. 생성되면 그 입력 이벤트 핀을 클래스의 모든 액터 구하기 노드에 연결합니다. 그런 다음 워프 타깃 이름을 이름(Name) 핀에 할당합니다. 이 이름은 앞서 몽타주에서 정의한 워프 타깃 이름과 일치해야 합니다.
또한 트랜스폼에서 워프 타깃 추가 또는 업데이트 노드를 타깃 위치에 링크해야 합니다. 워프 타깃 핀을 우클릭하고 구조체 분할 핀 을 선택하여 이를 이중의 위치/회전 핀 구조체로 변환합니다. 그런 다음 액터 위치 구하기 의 반환 값(Return Value) 핀을 액터 위치 구하기 의 반환 값과 연결합니다.
액터 위치 구하기 노드의 반환 값 (벡터 값, 노란색 핀으로 표시됨)과 트랜스폼에서 워프 타깃 추가 또는 업데이트 노드의 타깃 트랜스폼 핀(트랜스폼 값, 주황색 핀으로 표시됨)을 연결할 때 변환 노드가 생성됩니다. 서로 다른 타입의 값이 있지만, 변환을 통해 호환 가능한 경우 언리얼 엔진은 핀 연결 시 자동으로 변환 노드를 생성합니다.
몽타주 재생
이제 이벤트 그래프에서 스켈레탈 메시(Skeletal Mesh) 컴포넌트를 레퍼런스하고 그 위로 몽타주를 재생할 수 있습니다. 스켈레탈 메시 컴포넌트를 이벤트 그래프로 드래그 앤 드롭합니다.
그래프를 우클릭하고 애니메이션(Animation) > 몽타주(Montage) > 몽타주 재생(Play Montage) 을 선택하여 몽타주 재생 노드를 추가합니다. 그런 다음 몽타주 에셋을 재생할 몽타주(Montage to Play) 핀에 할당합니다.
결과
이제 레벨을 플레이하면 캐릭터가 펀치 애니메이션을 재생할 때 적절한 위치로 워프하는 것을 볼 수 있습니다.
아래에서 단순 워프 타깃 위치로 이 페이지의 모션 워핑을 구현하는 데 사용된 캐릭터 블루프린트 로직의 전체 이미지를 볼 수 있습니다.