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

[28강] Player Combo - 2

whereareyoung 2024. 6. 25. 23:48

이번시간에는 콤보를 구현하고, 더 자연스럽게 만드는 방법에 대해 다룰 예정이다.

이 단계를 진행함에 앞서서 저번시간에 다루었던 "구조체" 에 관한 내용을 다시 정리하자면 다음과 같다.

 

구조체 : 여러개의 변수를 묶어서 관리하기 위해 사용, Break 명령어를 써서 구조체의 변수 각각 하나씩을 다룰 수 있으며 식별이 쉽게 하기 위해 접두사 f를 붙여 사용한다.

 

또, 본격적으로 구현을 진행하기에 앞서 "열거형" 을 사용하여 이전에 작성해두었던 코드들을 정리하도록 하겠다. 

회피 등 다양한 플레이어 콤보를 구현함에 있어 여러가지 "상태" 가 등장하는데, Boolean변수(불 변수)가 너무 많아지면 처리가 어렵기 때문에 열거형을 사용하여 상태를 정리하도록 하겠다. 

 

* 불 변수들

 

열거형은 접두사로 알파벳 "E" 를 사용하며, 이름만 가지고 있으며 변수는 해당 이름 중 하나를 가지게 된다. 

 

1. "Player" 폴더 > 블루프린트 > 열거형 생성, Rename "Estate" 

2. "Estate"안에서 "신규"를 눌러가며 다음과 같이 설정하여 준다. 

    1) Idle : 대기 상태

    2) Attacking : 공격 중인 상태 

    3) Drawing : 칼을 뺴는 중인 상태 

    4) Sheathing : 칼을 넣는 중인 상태

3. "Estate" 형 변수 "State" 를 생성하여 준다. 

열거형을 사용하여 기존 변수들을 교체하여 줄 것이다. 

 

컴파일 하여 보면 다음과 같이 맨 앞에 넣어주었던 값이 기본값에 들어가 있다. 

 

4. BP_Player > Sword Event > "Equip Sword"을 set "State"를 활용하여 다음과 같이 세팅하여 준다. 

5. BP_Player > Sword Event > "Sheath Sword"을 set "State"를 활용하여 다음과 같이 세팅하여 준다. 

6. 변수에서 Drawing, Sheathing 을 삭제하여준다. 

7. Attacking > 레퍼런스 찾기 및 처리 

 

Attacking을 사용하여 구현한 부분은 다음과 같다. 

Get State 후 == 로 다음과 같이 처리하여 Idel(대기상태) 일 경우만 공격에 들어갈 수 있도록 처리하여 준다. 

 

마무리로 변수에서 Attacking을 삭제하여 준다. 

 

8. "ABP_Player" 에서 다음과 같이 세팅하여 준다. 

9. 이제 변수를 열거형으로 대체하였음에도 버그없이 잘 돌아가는지 테스트를 마친 후 다음단계로 넘어가준다. 

 

 

공격 모션 수정 

현재까지의 작업은 다음과 같은 오류가 있다. 이미 공격중인 상태에서 계속 새로운 공격이 가능하다. 

어떤 상태였는지를 체크하고, 칼을 빼고 / 어떤상태였는지를 체크하고, 칼을 넣는 방식으로 이 버그를 해결할 것이다. 

if 를 활용하여 idle 상태 일 때만, 칼을 뺄 수 있도록 조건을 하나 넣어줄 것이다. 

 

1. BP_Player > Sword Event > Equip Sword 

 

 

2.  BP_Player > Sword Event > Sheath Sword 

 

위와 같이 구현하면, 앞서 언급했던 버그가 사라진 것을 확인 할 수 있다.

여기까지 Boolean 변수들을 정리하고, 상태를 정리하고 간단한 버그를 수정하였다 

Drawn 의 경우 칼을 쥔 상태가 칼을 빼느냐 넣느냐만 하니까 두고 뒤에가면 마법 등을 하는데 칼을 든 상태, 마법상태 할때 변경 하도록 하겠다. 

 

콤보처리 

 

<노티파이 콤보 구간 처리 순서>

1. 다음 콤보를 받을 구간 지정 

2. 다음 콤보 구간에서의 입력이 있었다면 다음 동작 플레이 

* 콤보가능 구간 변수 "EnableNextCombo"

* 콤보 구간에서 "ComboCount" 변수를 두고 입력이 있었다면 0에서 1로 처리

* "ExistNextCombo" True 일 경우 다음 콤보 애니메이션 플레이

3. 다음 동작이 없었다면 공격완료 처리 

 

1. BP_Player > "EnableNextCombo" Boolean 형 변수 생성

2. 애니메이션 노티파이 "ANS_EnableNextCombo" 생성, GetNotifyName 에 다음과 같이 세팅 

3. "Received_NotifyBegin" 함수에 다음과 같이 세팅

4. "Received_NotifyEnd" 함수에 다음과 같이 세팅 후 저장 

5. BP_Player > "Attacking_Event" 

공간 마련을 위해 다음 부분을 체크하여 뒤로 옮겨준다. 

 

6. if 조건이 2개 겹쳐있어 보기 불편하지만, 일단 무시하고 나중에 이어질 마법 / 검 전환 구현을 쉽게 하기위해 일단 다음을 함수로 바꾸어준다. 

1) 함수 Can Attack 을 생성한다. 

2) 다음과 같이 생성한다, 반환노드에 Can Attack Boolean 을 추가하고, 퓨어체크도 해 준다. 

* Return : 반환노드 

칼을 쥐고 있어야 하니 Drawn 이 True여야 하고, State 가 Idel 이여야 한다. 

 

- 퓨어체크 : 퓨어 체크 해 두면 다음과 같이 쓸 수 있다. 해 두지 않으면 실행노드로 가서 값을 리턴받아서 써야하는 번거로움이 있다. 

 

7. BP_Player > "Attacking Event" 를 다음과 같이 세팅하여 준다.

공격이 시작되면 처음에는 무조건 False 이다. 그래서 밑에 End Attacking > Idle 로 들어온다. 

여기까지 문제없이 구현이 되었다면 정상적으로 동작하는 것을 확인 할 수 있다. 

 

다음시간에는 이러한 기본구조를 활용하여 입력받아 다음동작으로 넘기는것을 구현할 예정이다. 

현재까지 큰 문제없이 구현이 진행되어 가서 기쁘다! 

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

[30강] Player Combo - 4  (0) 2024.06.30
[29강] Player Combo - 3  (1) 2024.06.30
[27강] Player Combo - 1  (1) 2024.06.16
[26강] Damaged Enemy - 4  (0) 2024.06.10
[25강] Damaged Enemy - 3  (1) 2024.06.06