Unreal engine 4 게임개발, Sword RPG, 캐릭터 애니메이션 - 2

캐릭터 애니메이션 - 2


예정대로 오늘 포스트에서는 캐릭터 움직임에 맞는 애니메이션을 몇 개 구현해보겠습니다.

이번에도 daehee Hwang님의 유튜브가 굉장히 도움되었습니다(감사합니다!)
https://www.youtube.com/channel/UCbJMPsSYroufr63WFpUYUDw


저번 포스트에서는 Entry를 Idle에 연결했습니다. 그래서 플레이를 누르면 Idle이 재생됐습니다. 이번에는 새로운 애니메이션, Jog_Fwd를 끌어다놓고 연결해줬습니다.

연결하면 연결선 위아래에 아이콘이 생기는데 이를 '트랜지션 룰'이라고 합니다.
클릭해서 들어가면 결과값으로 True 또는 False를 결정해야만 하는 노드가 나옵니다. 이를 이용해 한 애니메이션에서 다른 애니메이션으로 전환할 수 있습니다.

여기서는 Idle 애니메이션과 Jog 애니메이션 간의 전환이 필요하므로
캐릭터의 이동속도라는 조건으로 전환할지 말지를 알려줍니다.


Idle에서 Jog로 넘어가는 트랜지션 룰 아이콘을 클릭해 들어온 모습입니다.

Get Owning Actor(이 Anim_BP를 소유한 액터, 즉 어흥)를 시작으로 어흥이의 속력을 구하고
그것이 1을 넘으면 True가 됩니다.
즉 어흥이 속력이 1을 넘으면 Jog 애니메이션이 재생됩니다.

Jog에서 Idle로 넘어가는 트랜지션 룰은 반대이므로
속력이 1이하로 가면 True가 되도록 설정했습니다.


플레이를 누르면 아무 입력을 하지 않을 때 Idle, 움직이면 Jog가 재생됩니다!
움직이는 애니메이션을 간단하게 해봤으니 공격 애니메이션도 만들어보겠습니다.


Kwang에 다 있으므로 찾기만 하면 됩니다. Primary Attack_A_Slow 애니메이션을 찾습니다.

참고로 커서를 대보면 파일 이름 옆에 '애니메이션 시퀀스'라고 써있는데
이는 스켈레탈 메시에서 재생할 수 있는 단일 애니메이션 애셋입니다.
아래의 테가 초록색으로 되어 있으며 언리얼 애니메이션 기본 단위라고 생각하시면 됩니다.


'애니메이션 시퀀스 우클릭 - 생성 - 애님 몽타주' 순으로 클릭하여 애님 몽타주를 만듭시다.

애님 몽타주는 간단하게 말하면 애니메이션 편집 도구라고 할 수 있습니다.
애니메이션 반복 재생이나 길이 편집, 재생 시 사운드 추가 등 다양한 기능을 가졌으므로
게임을 만들 때 유용합니다.

또, 공격 모션처럼 한 번씩 재생하는 애니메이션에 적합합니다.
그래서 애님 몽타주를 만들어줬습니다.


몽타주를 만들어 클릭하면 아래와 같은 화면이 뜹니다. 여기에서 여러 가지 작업을 할 수 있습니다.

사실 이 자체만으로 충분히 훌륭한 애니메이션이기 때문에 한 번 손대지 않고 그대로 재생시켜보겠습니다.
문제가 있다면 차근차근 고치면 되니까요.


공격 기능을 구현하기 위해 어흥이로 들어가줍니다.


왼쪽 마우스 버튼을 클릭하면 아까 만든 공격 애님 몽타주를 재생하는 블루프린트입니다.
Boolean으로 '공격중?'이라는 변수는 이후에 발생할 문제를 해결하기 위해 넣었습니다.


스테이트 머신과 최종 애니메이션 포즈 사이에 'DefaultSlot'이라는 걸 끼워넣었습니다.
이것이 있어야 아까의 공격 애님 몽타주를 애니메이션 실행 중에 덮어씌우는 식으로 발동시킬 수 있습니다.


플레이를 누르고 왼쪽 마우스 버튼을 클릭하면 멋있게 칼로 올려칩니다.
게임이 더 완성된 느낌입니다...!

사소한 문제가 하나 있습니다. 공격 중에 공격을 누를 수 있습니다.
왼쪽 마우스 버튼을 클릭하면 칼을 휘적대네요..보기 흉하니 해결해봅시다.


공격 애님 몽타주로 간 후 '노티파이'를 추가합니다. 노티파이는 애니메이션이 재생되는 특정 지점에 이벤트를 발생시킬 수 있습니다.
예를 들어 걷기 애니메이션 중 발소리와 흙먼지나게 하기, 공격 시 불이 생기게 하기 등
다양한 사용이 가능합니다.

여기서는 공격 모션이 끝나갈 때쯤에 이벤트를 추가해서
위의 문제를 해결하는 데 이용해보겠습니다.
오른쪽 마우스를 클릭해 새 노티파이를 만들어줍니다.


노티파이의 이름은 '공격끝'으로 했습니다.
공격 모션이 끝나갈 때쯤에 "공격 끝났어요~"를 알려줄 놈입니다.


어흥Anim_BP의 이벤트 그래프로 갑니다. '이벤트 AnimNotify_공격끝'을 추가해줍니다.


캐릭터 블루프린트에 '공격끝' 소식을 알려줘야하므로 '어흥'에 형변환을 하고
'어흥'의 Boolean 변수인 '공격중?'을 False로 설정합니다.


이제 왼쪽 마우스 버튼을 연타해도 칼을 휘적거리지 않을겁니다.
조금 길어졌으니 공격 모션이 어떻게 구성되었는지 정리해보겠습니다.

우선 캐릭터 블루프린트 '어흥'에 마우스 왼쪽을 클릭하면 공격 애님 몽타주를 재생하도록 만들었습니다.

사실 재생만이 목적이라면 왼쪽 마우스 버튼에 곧장 Play Anim Montage를 연결하면 되지만 그러면 정말로 게임을 만들었을 때 문제가 생기겠죠.
실제로 위에서는 공격 중에 공격을 할 수 있는 문제가 발생했습니다.

그래서 Branch 를 이용해 '공격중?'이 False이면 공격이 가능하도록 하고 True이면 불가능하게 만들었습니다.

그리고 애님 몽타주에는 '공격끝'이라는 이름의 노티파이를 추가했고
공격 모션이 거의 끝나서 '공격끝'이라는 이벤트가 발생하면
'공격중?'을 False로 바꿔 공격이 가능하게 했습니다.


대충 이런식입니다. 그럼 이제 의도한대로 굴러가는지 플레이를 해보겠습니다.


잘 됩니다! 이제 하나의 공격이 다 끝난다음에야 공격할 수 있습니다...!
내친김에 상황을 더 다양하게 제한해보겠습니다. 진짜 게임처럼요.


공격중일 때 움직일 수 없도록 만들었습니다.


칼을 휘두르는 동안에는 움직일 수 없네요. 잘 됩니다!


'기본 공격'에서는 공중에서 공격이 불가능하도록,
'Jump'에서는 공격 중에 점프가 불가능하도록 만들었습니다.


또 Kwang의 애니메이션 중 점프는 'Start - Apex - Land -Recovery', 총 4개의 애니메이션이 있었기 때문에 자연스럽게 보이려면 이것들을 붙여서 사용해야 합니다.

저는 Jump_Start 에 오른쪽 클릭해서 애님 몽타주를 만들었습니다.
(4개 중 뭘로 만들어도 상관없습니다.)
그 다음 화면처럼 몽타주 그룹에 애니메이션들을 순서에 맞게 끌어다 놓기만 하면
애니메이션이 붙어서 재생됩니다!!
마지막으로 위위 사진처럼 Jump 노드 뒤에 Play Anim Montage를 만들고
점프 애님 몽타주로 설정해주면 점프할 때 애니메이션이 실행됩니다.


더 자연스러운 움직임을 위해 Event On Landed(착륙했을 때 발생하는 이벤트)를 이용해보겠습니다.
위처럼 구성하여 캐릭터가 땅에 닿으면 즉시 점프 애님 몽타주를 멈추도록 합시다.


플레이해보면 이제 좀 자연스럽게 움직이는 캐릭터를 볼 수 있습니다. 공격할 때는 점프하거나 움직일 수 없고, 공중에서 공격할 수도 없습니다...!
점프 애니메이션도 제대로 실행됩니다. 땅을 아무리 빨리, 늦게 밟아도 꽤 적절한 애니메이션을 보여줍니다.

이렇게 캐릭터 애니메이션을 대략 구성해봤습니다.
다음 포스트에서는 블렌드 스페이스를 사용해서 애니메이션을 업그레이드한 후
추가로 할 애니메이션 작업이 있는지 살펴보겠습니다.

댓글