Ludens
의 Unreal-Study 자료입니다.Attack 기능을 만들기 전에, 이에 필요한 Custom Event 를 생성할 것입니다.
이벤트 그래프의 빈공간을 우클릭한 뒤, 'customevent'라고 검색하여 추가해줍시다.
- 눈치채셨겠지만, 이는 콤보 공격을 위한 것입니다.
- SaveAttack : 직전 상황에 Attack 을 했는지 여부를 담는 변수
- IsAttacking : 현재 Attack 중인지 여부를 담는 변수
- AttackCount : Combo 를 누적하는 변수 (0부터 시작)
PlayAnimMontage 노드의 Anim Montage 부분에 들어갈 애니메이션 몽타주는 다음과 같습니다. (위에서 부터)
- PrimaryAttack_A_Slow_Montage
- PrimaryAttack_B_Slow_Montage
- PrimaryAttack_C_Slow_Montage
- PrimaryAttack_D_Slow_Montage
코드를 완성했습니다. 하지만 왜인지 플레이를 해보면 공격이 안됩니다. 왜일까요?
- 아직 PlayerAnimBP 에서 추가할 것이 남았기 때문입니다.
- 쉽게 말해, 애니메이션에 직접 Notify 를 넣어서 특정 시점에 Notify 가 발동하게 되면 이러한 발동 정보를 이용해 그 시점에 또 다른 이벤트가 발생하게끔 하는 것입니다.
ex) 걷는 동작 중, 발이 땅에 닿는 시점에 Notify 를 넣어 이 시점에 발걸음 소리가 나게끔 설정
PrimaryAttack_A_Slow_Montage 를 열어보면, 이미 AnimNotify 가 존재하는 것을 확인할 수 있습니다.
- 이는 Paragon 에셋 자체에 담겨있는 것입니다.
따라서 우리가 해야할 것은 따로 없지만, 그래도 AnimNotify 를 생성하는 법을 간단히 소개하겠습니다.
- 매우매우 간단하니 그냥 봅시다!
- 꼭 저 부분에 추가해야하는 것은 아니지만, 예시니까 그냥 저 부분에 추가해봅시다.
- 노티파이 이름은 예시니까, Example 로 합시다.
- PlayerAnimBP 의 이벤트 그래프로 갑시다.
- Animation Montage 가 실행되면서 특정 시점에 Notify 발생
- 발생한 Notify 를 PlayerAnimBP 이벤트 그래프에서 캐치
-> AnimNotify_SaveAttack, AnimNotify_ResetCombo 이벤트를 통해 캐치
- 각각의 Notify 가 캐치되면 PlayerBP 에 생성해둔 커스텀 이벤트 SaveCombo, ResetCombo 가 실행됨
Montage 가 재생되지 않을 때, 대부분은 이 문제일 가능성이 높습니다. 기억해두면 좋을 것 같습니다!
PlayerAnimBP 에서 AnimGraph 로 이동합시다. 그리고 빈 공간을 우클릭하여 'defaultslot' 이라고 검색해줍시다.
- 이 과정은 보편적이진 않습니다. 보통은 슬롯 이름을 바꿔주지 않아도 잘 작동합니다.
문제가 있습니다. 캐릭터가 공격중에 이상하게 이동합니다. 피겨 선수도 아니고 말이죠~
- 따라서 공격중 이동을 제한해줄겁니다.
다시 PlayerBP 를 열어봅시다.
Combo Attack 부분에 빨간색 박스로 표시한 부분을 추가해줍시다.
- 최대 걷기 속도 : 'set max walk speed' 검색
- 무브먼트 방향으로 회전 조정 : 'set orient rotation to movement' 검색
- 캐릭터 무브먼트 : 'get character movement' 검색
최대 걷기 속도를 0으로 만들어 공격중에 움직이지 못하게 하고, 무브먼트 방향으로 회전 조정 옵션은 false 로 바꿔주어 마우스를 움직여도 시점이 고정되게끔 하는 것입니다.
- 콤보가 리셋되었을 때, 즉 공격이 멈췄을 때는 다시 속도를 원래대로 바꿔주고, 무브먼트 방향으로 회전 조정 옵션도 true 로 만들어줍니다.
- PrimaryAttack_A_Slow_Montage 를 찾아서 열어봅시다.
- 이 작업을 PrimaryAttack_B_Slow_Montage, PrimaryAttack_C_Slow_Montage,PrimaryAttack_D_Slow_Montage 에도 해주면 됩니다.
빠릿빠릿 하군요~
여기까지 1주차 Part.2 - Player Attack 이었습니다. 다음 포스팅은 2주차 Part.1 - AI Basic 입니다~