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

[45강] Calling Weapon Attack

whereareyoung 2024. 8. 26. 00:11

이번시간에 진행할 내용은 다음과 같다

- Sword, Wizard 통합해서 Weapon 객체에 넣기

- Weapon 에서는 " Sword > Sword Attack " / " Wizard > Wizard Attack " 콜하도록 작업

 

이번시간에는 무기로 콤보등을 다 옮겼으니 Attack 실행하는 작업을 해 줄 것이다 

 

1. BP_Player 변수 및 함수 정리

   1) BP_Weapon 형 "Weapon" 변수생성, Weapon 카테고리로 변경 

    2) Sword 변수, Weapon 카테고리로 변경 

    3) HandFireball > Wizard 로 Rename, Weapon 카테고리로 변경 

 

    4) CanSwordAttack, CanWizardAttack 함수를 삭제하여 준다. 

Attack 체크도 다 넘겨놨기 때문에 필요없어진 부분 삭제하여 준다.

 

2. Sword 모드일 때 Weapon에 Sword를 할당해주고, 아니라면 Null을 할당

   1) BP_Player > 이벤트 그래프 > Sword Event > Equip Sword > 다음과 같이 세팅  

 

    2) BP_Player > 이벤트 그래프 > Sheath Event > 다음과 같이 세팅  

 

객체를 Set 할 때 아무것도 연결하지 않으면 아무것도 없는 상태인 Null 상태가 됨 이후 IsValid로 설정되어 있는지 체크할 수 있음 

 

3. 노드정리

   1) BP_Player > 이벤트그래프 > Sword Event > 다음부분 "Sword Action" 으로 노드정리 

 

    2) BP_Player > 이벤트그래프 > Wizard Event > 다음부분 "Wizard Event" 로 노드정리 

 

4. Wizard 모드일 때 Weapon에 Wizard를 할당해주고, 아니라면 Null을 할당

   1) BP_Player > 이벤트 그래프 > Wizard Event > 다음과 같이 세팅  

 

    2) BP_Player > 이벤트 그래프 > Wizard Event > 다음과 같이 세팅  

 

 

Attack Call 설정 

BP_Player > 이벤트그래프 > Attacking Event 다음과 같이 세팅

Weapon 이 누가됐던 Attack 을 Call 해주면 Attack 이 발생된다. 

 

오류해결 

1. BP_Combo > PlayComboMontage 다음 부분 다시연결

 

2. AN_EndAttacking > Received Notify (const) 에 다음부분을 다음과 같이 수정하여 준다.  

1) 문제 확인

End Attacking 이 이제 BP_Player 에 들어있지 않아 오류가 발생한다. BP_Weapon 에서 가져와 주어야 한다. 

2) BP_IWeapon > GetCharacterWeapon 함수를 생성하여 준다. 

3) BP_Player > Get Character Weapon > 다음과 같이 세팅 

 

4) AN_EndAttacking > Received Notify (const) 다음과 같이 세팅해 수정 

* 소유자가 누가 되었던 간에 IWeapon으로부터 상속받아져 있다면 해당 캐릭터가 소유하고 있는 현재 무기를 리턴 

Get Owner의 경우 어자피 소유자가 Character 가 될 것이다. 인터페이스에서 상속받았다면 거기서 Weapon 을 가져와  End Attack 을 가져와 준다.

 

3. 이름정리 

1) AN_EndAttacking > AN_EndAttack 으로 Rename, AN_CheckNextCombo > AN_PlayNextCombo 로 Rename

2) AN_EndAttack, AN_PlayNextCombo > Get Notify Name (const) 다음과 같이 Return Value 변경 

 

4. AN_EndAttacking > Received Notify (const) 복사, AN_PlayNextCombo > Received Notify (const) 붙여넣기 밑 다음과 같이 세팅 

* Play Next Combo 는 BP_Combo 에 있으므로 BP_Weapon 자료형을 BP_Combo 로 형변환 하여 사용 

 

5. AN_PlayNextCombo > Received Notify (const)  복사,

   1) AN_EnableNextCombo > Received Notify Begin (const) 붙여넣기 밑 다음과 같이 세팅 

 

   2) Received Notify End (const) 붙여넣기 밑 다음과 같이 세팅 

* Enable Next Combo 도 BP_Combo 에 있으므로 BP_Weapon 자료형을 BP_Combo 로 형변환 하여 사용

 

테스트 

플레이 하여보면 다음 두가지가 동작하는 것을 확인 할 수 있다.

1) Sword 공격

2) Wizard 공격

 

지금까지의 작업은 ISP(인터페이스 분리 원칙)을 활용하여 확장성을 높이고 수정을 용이하게 한 것이다. 

"인터페이스"를 활용해 그룹을 분리해놓고 Weapon 쪽에 기능을 추가 할때 Player 에는 영향이 없도록.. 

 

객체지향 원칙 5개 (SOLID)

SRP(단일 책임 원칙)

OCP(개방-폐쇄 원칙)

LSP(리스코프 치환 원칙)

ISP(인터페이스 분리 원칙)

DIP(의존 역전 원칙)

 

객체지향에는 상속과 추상등의 성질이 있는데, 인터페이스는 추상에 속한다. 

* 추상 : 재정의해서 쓰는것 (인터페이스)

 

아이템도 마찬가지로 BP_Item 만들어서 인터페이스 만들어서 통신할 수 있도록 해 구현 할 수 있다. 

 

다음시간에 구조 다시한번 정리 후 버그를 해결하도록 하겠다

또한, Last Combo 의 경우도 추가적으로 작업 할 예정이다. 기대가 된다!

 

 

 

 

 

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

[47강] Wizard Skill  (3) 2024.08.26
[46강] 전체 구조 및 버그 해결  (0) 2024.08.26
[44강] Inherit Combo  (0) 2024.08.05
[43강] Inherit Weapon  (0) 2024.07.31
[42강] Interface  (0) 2024.07.29