[UE] Player Attack

허건호·2023년 2월 2일
1

Unreal Engine

목록 보기
2/6
post-thumbnail

Intro

  • 본 학습 자료는 경희대학교 게임 & 실감형 컨텐츠 제작 동아리 Ludens 의 Unreal-Study 자료입니다.

PlayerBP

  • PlayerBP 를 열어줍시다.

Custom Event 생성

  • Attack 기능을 만들기 전에, 이에 필요한 Custom Event 를 생성할 것입니다.

  • 이벤트 그래프의 빈공간을 우클릭한 뒤, 'customevent'라고 검색하여 추가해줍시다.

  • 2개의 Custom Event 를 추가해줄건데, 이름은 각각 SaveCombo, ResetCombo 로 합시다.
    • 눈치채셨겠지만, 이는 콤보 공격을 위한 것입니다.

  • 이 상태라면 성공입니다!

변수 생성

  • 이제 변수도 생성해줍시다. 총 3가지 변수를 만들겁니다.
    • SaveAttack : 직전 상황에 Attack 을 했는지 여부를 담는 변수
    • IsAttacking : 현재 Attack 중인지 여부를 담는 변수
    • AttackCount : Combo 를 누적하는 변수 (0부터 시작)

Attack

  • PlayAnimMontage 노드의 Anim Montage 부분에 들어갈 애니메이션 몽타주는 다음과 같습니다. (위에서 부터)

    • PrimaryAttack_A_Slow_Montage
    • PrimaryAttack_B_Slow_Montage
    • PrimaryAttack_C_Slow_Montage
    • PrimaryAttack_D_Slow_Montage
  • 코드를 완성했습니다. 하지만 왜인지 플레이를 해보면 공격이 안됩니다. 왜일까요?

    • 아직 PlayerAnimBP 에서 추가할 것이 남았기 때문입니다.

PlayerAnimBP

  • PlayerAnimBP 를 열기 전에, PrimaryAttack_A_Slow_Montage 를 열어봅시다.

Animation Notification

  • 줄여서 AnimNotify 라고 흔히 부릅니다. 이는 애니메이션 시퀸스에서 이벤트를 구성하고 받아 외부 동작을 수행하는 알림 시스템입니다.
    • 쉽게 말해, 애니메이션에 직접 Notify 를 넣어서 특정 시점에 Notify 가 발동하게 되면 이러한 발동 정보를 이용해 그 시점에 또 다른 이벤트가 발생하게끔 하는 것입니다.
      ex) 걷는 동작 중, 발이 땅에 닿는 시점에 Notify 를 넣어 이 시점에 발걸음 소리가 나게끔 설정

  • PrimaryAttack_A_Slow_Montage 를 열어보면, 이미 AnimNotify 가 존재하는 것을 확인할 수 있습니다.

    • 이는 Paragon 에셋 자체에 담겨있는 것입니다.
  • 따라서 우리가 해야할 것은 따로 없지만, 그래도 AnimNotify 를 생성하는 법을 간단히 소개하겠습니다.

    • 매우매우 간단하니 그냥 봅시다!

  • 표시된 부분에서 우클릭을 해줍니다.
    • 꼭 저 부분에 추가해야하는 것은 아니지만, 예시니까 그냥 저 부분에 추가해봅시다.

  • 그리고 '노티파이 추가' - '새 노티파이' 를 눌러줍시다.
    • 노티파이 이름은 예시니까, Example 로 합시다.

  • 그럼 끝입니다. 매우 간단하죠? 이제 Example 은 지우셔도 됩니다. 연습 삼아 해본거니까요~

다시, PlayerAnimBP

  • PlayerAnimBP 로 돌아옵시다. 이제 위에서 만들었던 AnimNotify 를 불러올겁니다.
    • PlayerAnimBP 의 이벤트 그래프로 갑시다.

  • 조금 헷갈릴 수도 있으니 전반적인 구조를 다시 잡고 갑시다.
  1. Animation Montage 가 실행되면서 특정 시점에 Notify 발생
  2. 발생한 Notify 를 PlayerAnimBP 이벤트 그래프에서 캐치
    -> AnimNotify_SaveAttack, AnimNotify_ResetCombo 이벤트를 통해 캐치
  3. 각각의 Notify 가 캐치되면 PlayerBP 에 생성해둔 커스텀 이벤트 SaveCombo, ResetCombo 가 실행됨
  • 이해가 되셨을거라 생각하고, 이제 플레이 해봅시다. 하지만, 아무리 마우스를 클릭하여도 공격이 나가지 않습니다.

Default Slot 추가

  • Montage 가 재생되지 않을 때, 대부분은 이 문제일 가능성이 높습니다. 기억해두면 좋을 것 같습니다!

  • PlayerAnimBP 에서 AnimGraph 로 이동합시다. 그리고 빈 공간을 우클릭하여 'defaultslot' 이라고 검색해줍시다.

  • 이를 생성한 후, Basic 과 Ground_Loco 사이에 넣어줍시다.

  • 그 후, 'DefaultSlot' 을 클릭하여 오른쪽 디테일 창에서 슬롯 이름을 'DefaulGroup.UpperBody' 로 바꿔줍시다.
    • 이 과정은 보편적이진 않습니다. 보통은 슬롯 이름을 바꿔주지 않아도 잘 작동합니다.

  • 그렇다면 Attack 기능이 잘 작동하는 것을 확인하실 수 있습니다!

공격중 이동 제한

  • 문제가 있습니다. 캐릭터가 공격중에 이상하게 이동합니다. 피겨 선수도 아니고 말이죠~

    • 따라서 공격중 이동을 제한해줄겁니다.
  • 다시 PlayerBP 를 열어봅시다.

  • Combo Attack 부분에 빨간색 박스로 표시한 부분을 추가해줍시다.

    • 최대 걷기 속도 : 'set max walk speed' 검색
    • 무브먼트 방향으로 회전 조정 : 'set orient rotation to movement' 검색
    • 캐릭터 무브먼트 : 'get character movement' 검색
  • 최대 걷기 속도를 0으로 만들어 공격중에 움직이지 못하게 하고, 무브먼트 방향으로 회전 조정 옵션은 false 로 바꿔주어 마우스를 움직여도 시점이 고정되게끔 하는 것입니다.

  • Combo Attack 부분의 ResetCombo 이벤트의 마지막 부분에도 위와 같이 추가해줍시다.
    • 콤보가 리셋되었을 때, 즉 공격이 멈췄을 때는 다시 속도를 원래대로 바꿔주고, 무브먼트 방향으로 회전 조정 옵션도 true 로 만들어줍니다.

공격중 Sprint 제한

  • 공격중 이동은 제한하였는데, Shift 를 눌렀을 때는 여전히 슬라이딩을 하게 됩니다. 따라서 공격중 Shift 를 눌렀을 때, 즉 공격중 Sprint 도 제한해주어야 합니다.

  • 간단합니다. IsAttacking 으로 공격중인지 여부를 판단하여, 공격중이지 않을 때만 Sprint 할 수 있게 하였습니다.

Attack Montage Speed

  • 공격 속도가 조금 느린 것 같아서 답답합니다. Montage 의 속도 스케일을 올려봅시다.
    • PrimaryAttack_A_Slow_Montage 를 찾아서 열어봅시다.

  • 여기서 속도 스케일을 1.5로 바꿔줍시다.
    • 이 작업을 PrimaryAttack_B_Slow_Montage, PrimaryAttack_C_Slow_Montage,PrimaryAttack_D_Slow_Montage 에도 해주면 됩니다.

  • 빠릿빠릿 하군요~

  • 여기까지 1주차 Part.2 - Player Attack 이었습니다. 다음 포스팅은 2주차 Part.1 - AI Basic 입니다~

profile
이사감 -> bit.ly/KunHo_Heo

0개의 댓글