본문 바로가기

언리얼 개발자

[Unreal] Montage Loop & Jump Section

 최근에 스킬 캐스팅 업무를 맡으면서 몽타주 섹션 반복 기능에 대해 알아보게 되었습니다.

- 업무에 필요한 부분만 찾아보았기 때문에 많은 내용이 담겨있진 않습니다.

- 기능을 알아보는 게시글이라, 따로 코드는 없습니다.

- 이 글은 UE 4.27 기준으로 작성되었습니다.


필요성

위에서 얘기한 스킬 캐스팅과 관련된 애니메이션 예시는 아래와 같습니다.

1. Casting Start Animation ( ex) 칼을 칼집에 넣는 모션 )

2. Casting Loop Animation ( ex) 칼을 칼집에 넣은 채 기를 모으는 모션)

3. Attack Animation ( ex) 칼을 빼들며 공격하는 모션 )

 

 기획 측에서 설정한 캐스팅 시간 동안 Casting Loop Animation이 실행되다가 Attack Animation이 나오는 것입니다.

스킬 캐스팅을 구현하는 방식은 다양하겠지만 하나의 몽타주 안에 애니메이션들을 넣고 섹션을 구분하는 형태로 진행하게 되었습니다.


몽타주 에셋

 먼저 몽타주 에셋 세팅부터 하겠습니다. gif와 같이 세 가지 모션들을 하나의 몽타주로 만들었습니다.

이제 이 에셋에서 Loop 애니메이션(2번 애니메이션)을 기획에서 설정한 시간동안 플레이해주다가 공격 애니메이션(3번 애니메이션)을 실행시켜주면 됩니다.


몽타주 섹션 세팅하기

 이제 Loop 섹션과 캐스팅 시간 이후 플레이할 섹션을 구분하도록 하겠습니다.

레이아웃마다 다를 수 있지만 몽타주 에셋 에디터의 우하단에 '몽타주 섹션' 이 있습니다. 없을 경우 [ 창 - 몽타주 섹션 ] 을 클릭해주세요. 몽타주 섹션에는 Default 섹션이 기본적으로 생성되어 있습니다.

 

1. 몽타주 섹션 생성하기

 파랑색 'Default' 섹션이 있는 라인에 오른쪽 마우스를 클릭하면 새 몽타주 섹션을 만들 수 있습니다. 

 

Loop 애니메이션을 'Casting' 섹션으로, 공격 애니메이션은 'Execute' 섹션으로 구분했습니다.

 

2. 몽타주 섹션 링크 설정하기

 '몽타주 섹션'에서 구분된 섹션간의 링크를 원하는 플로우에 맞춰 세팅합니다.

1. Default 섹션 -> Casting 섹션(Loop)

2. Execute Section 실행

3. 애니메이션 끝

섹션 링크 설정

 흰색 화살표나 하얀색 네모박스를 클릭하면 원하는 섹션을 설정해줄 수 있습니다. 만약 Casting 섹션이 반복되길 원한다면 Casting 다음 섹션을 동일하게 Casting으로 세팅하시면 됩니다. 플레이 하면 Casting 섹션을 반복해서 돌게 만들었으니 Execute로 넘어가지 않고 Casting 섹션에 머무를 것입니다.


원하는 타이밍에 몽타주 섹션 실행하기

 이제 만든 몽타주를 실행하고 특정 시간 이후에 Execute 섹션을 실행해주도록 하겠습니다. 관련 함수는 AnimInstance에 정의되어 있습니다.

C++ Montage_JumpToSection
Blueprint Montage Jump to Section

 인자로 섹션 이름과 적용할 Montage를 받도록 되어있습니다. 섹션 이름은 몽타주에서 세팅하신 섹션 이름을 그대로 보내주면 됩니다. ( 예시에서의 Execute ) 적용할 몽타주는 플레이한 몽타주를 넣어주시면 되는데, nullptr로 넘길 경우 모든 실행 중인 몽타주에 적용된다고 되어 있습니다.

1. 몽타주 실행

2. 캐스팅 시간 Timer 설정

3. 캐스팅 시간 이후 Execute 섹션으로 Jump하도록 설정


결과 ( 캐스팅 시간 5초 )

결과 영상

 시간을 통한 섹션 실행이 아닌 유저의 인풋, 혹은 이벤트 등에 의해 섹션을 실행시켜줄 경우 다양한 기능들을 구현할 수 있겠다는 생각이 들었습니다.

 

 아직 이 기능을 적용해보지 않아 어떤 문제점이 있을지는 판단이 어렵습니다. 추후에 문제점이 있다면 추가적으로 이 게시글에 내용을 추가할 생각입니다.