이번시간에 진행할 내용은 다음과 같다
- 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 |