Unreal Engine/게임클래스 - 언리얼엔진 기초

[29강] Player Combo - 3

whereareyoung 2024. 6. 30. 17:41

콤보구현

 

지금까지 콤보 들어가는 입력을 열었는데, 이 구현을 기반으로 콤보 입력 액션 진행시 콤보 카운트를 올려주고, 콤보 카운트에 따라 다음 콤보 애니메이션을 플레이 해 주는 작업을 진행하도록 하겠다. 

현재는 Attacking 입력 액션이 일어났을때 첫번째에서 Enable Next Combo가 무조건 Flase고 Can Attack 은 True가 되어 들어와 Attacking이 일어난다. 그리고 애니메이션 몽타주가 플레이 되게끔 되어있다.

이제 Animation Notify 에 의해서 Enable Next Combo가 True가 되어있었다면, True 로 빠져서 진행이 될 것이기 때문에 이 부분을 구현하여 주면 된다! 

 

1. Integer변수 "SwordComboCount" 를 추가

개수만 카운트 되어 질 것이니 Int형으로 충분하다.

2. 2차 콤보 구현을 위해 Boolean 형 변수 "SwordExistNextCombo" 를 추가하여 준다.  

3. 다음과 같이 콤보를 구현하여 주고, 콤보 설정이 들어 오는지 체크하여 주기위해 "Combo" 프린팅까지 세팅해준다. 

* ++ 키워드로 검색하면 Increase int 함수가 뜬다. 

- Increament : 1 증가

- Decreament : 1 감소

* SwordExistNextCombo 체크 : 처음에는 다음 콤보가 True 라고 체크해 주어야 한다 (다음 콤보가 들어와 있다, 존재한다), 그리고 그 후의 실행때 초기화를 위해 다시 꺼 주어야 한다. 

 

4. Animation Montage "Standing_Melee_Attack_1_Montage" 에서, 내려치기를 시작하는 동작에서 노티파이 스테이트 "ANS_EnableNextCombo"를 추가하여 준다. 애니메이션 시작 구간에서 넣어주면, 플레이어가 Attacking 입력액션을 마구잡이로 진행하면 콤보가 마구잡이로 들어가기 때문에 조금 여유를 두는 편이 적합하다.

위와 같이 내려치기 시작하는 부분, 내려 친 부분 사이로 끊어주면 딱 적합하다. 저 민트 구간에서만 콤보 입력을 받을 것이다. 

 

5. 다음과 같이 Attacking 입력액션을 넣어주고 (마우스 왼쪽 버튼 클릭) , Animation Montage " Standing_Melee_Attack_1_Montage " 가 플레이 되는데 "EnableNextCombo" 노티파이가 있는 구간에서 또 Attacking 입력액션을 넣어주면 Combo 가 프린팅 되는 것을 확인 할 수 있다. 

 

6. 이제 EndAttacking 을 세팅하여 줄것인데, EnableNextCombo 에서 입력이 들어오면 (True면) Combo 를 실행하여 주고, 들어오지 않으면 그냥 EndAttacking 을 진행하여 줄 것이다. 

 

ExistNextCombo 가 True인지, False인지에 따라서 일어나기 때문에 다음과 같이 세팅하여 준다. 

* Enable Combo Count 값이 1이기 때문에 Combo Datas 1번 값이 플레이가 되게 된다. 아닐경우, Idle 로 돌아가고 값들을 초기화 하고 종료된다. 

 

7. 두번째 동작에 Notify 를 추가시켜 준다.

1) EndAttacking : 끝 부분 즘

2) CollisionSword : 쳐 올리기전, 쳐 올린 후

3) EnableNextCombo : 콤보 입력 받는 구간, 쳐 올리기 전후

 

8. 세 번째 동작에 Notify를 추가시켜 준다. (두번째 동작과 같으나, 콤보 입력이 더이상 없기 때문에 이 부분만 빠진다.)

1) EndAttacking : 끝 부분 즘

2) CollisionSword : 쳐 올리기전, 쳐 올린 후

 

8. Combo Attack 동작 2, 3 둘 다 Anim Montage 에 Anim Slot "UpperBody" 로 임시 설정해 플레이 해 테스트 해 본다.  이후 콤보가 정상적으로 출력되는 것을 확인할 수 있다.

 

그후 Attack2, 3의 슬롯을 다 FullBody 로 수정하여 준다. 

 

9. ABP_Player 를 다음과 같이 세팅하여 준다. 

아예 다 섞어버릴것이기 때문에 "본마다 레이어로 블랜딩 합니다" 함수를 다음과 같이 설정하여 준다.

 

*** 주의! 다음방법도 되는 것처럼 보이나, 치명적인 오류가 있다. 

* 1, 2번 공격 액션이 플레이 된 후 Idle 로 온다. ABP_Player > Jumping 노드에서 2번째 공격이 진행된 후 Unarmed 로 오기 때문이다. 왜냐하면  FullBody 가 실행된 후 모든걸 다 초기화 시켜버리기 때문에 Jumping도 Entry > Unarmed 로 자연스럽게 초기화 되는것이다. 

그래서 위와 같은 문제를 방지하기 위해 캐시포즈를 이용해 위에 언급한 방법으로 플레이 하여야 자연스럽게 0번이 플레이 되는 상황에서 Jumping이 초기화 되지 않고 플레이 된다.

 

10. 다음과 같이 "Play Sword Combo Montage" 함수를 생성해 관리하기 편하게 구성한다. (이전에 만든 노드를 복사하여 사용하면 편안하다) 또한, 콤보가 실행되는 동안에는 움직일 수 없도록 다음과 같이 세팅한다. 

 

* 대체하는 부분 1, 2

다음과 같이 두 곳을 바꿔치기 하여 준다. 

 

11. "EndAttacking" 에서 "Can Move"를 초기화 시켜준다. 현재까지 구현한 것에는 버그가 있는데,  콤보공격을 마친 후에 "Can Move" 가 풀리지 않았다는 것이다. 아래와 같이 세팅하여 이동구현으로 돌아갈 수 있도록 하여 준다. 

 

구현은 되었으나 퀄리티를 높여야 하는 상황이넫, 뚝뚝 끊기는 느낌, 속도 조절 등 밸런스를 맞추는 작업이 필요해 보인다. 

지금까지 기본적인 콤보 구현은 완료되었으나 다음 구현을 통해서 콤보 구현을 더욱 자연스럽게 조정하여 주도록 하겠다. 

 

 

전신콤보 구현이 정상적으로 완료되어 기쁘다. 

'Unreal Engine > 게임클래스 - 언리얼엔진 기초' 카테고리의 다른 글

[31강] Particle Effect  (0) 2024.06.30
[30강] Player Combo - 4  (0) 2024.06.30
[28강] Player Combo - 2  (0) 2024.06.25
[27강] Player Combo - 1  (1) 2024.06.16
[26강] Damaged Enemy - 4  (0) 2024.06.10