이번시간에는 콤보를 구현하고, 더 자연스럽게 만드는 방법에 대해 다룰 예정이다.
이 단계를 진행함에 앞서서 저번시간에 다루었던 "구조체" 에 관한 내용을 다시 정리하자면 다음과 같다.
구조체 : 여러개의 변수를 묶어서 관리하기 위해 사용, 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 |