[Unreal_블루프린트]#21_Interface, Combo 관련 클래스
Unreal 블루프린트 개발 중 "Interface"에 대해 알아보겠습니다.
"블루 프린트" 활용에 대한 내용입니다.
Interface
1. 상속 계층 디자인
Weapon ( 무기 혹은 공격 방식 ) : 최상위 클래스, 인터페이스 클래스
Character의 공격 방식에 따라서 크게 검을 휘두르는 "Sword" 공격 방식과 "Wizard(마법)" 공격 방식을 구현했습니다. 우리는 OOP를 위해 상위 클래스 혹은 인터페이스 클래스 "Weapon (공격 무기)"를 구현해보겠습니다. 잘 알다시피, C++의 인터페이스 클래스는 자세한 "구현"이 없는 순수 가상 메서드를 정의해두어 이를 상속하는 하위 클래스들이 순수 가상 메서드를 직접 오버라이딩하는 방식입니다. 말 그대로, "인터페이스"만 제공하는 클래스죠!
2. Interface 생성 및 구현
1. BPI_Weapon, 인터페이스 생성
Unreal에서 제공하는 "Interface"를 생성하고, 이를 상속하는 "Sword" 혹은 "Wizard" 클래스, 그 외 하위 클래스들은 인터페이스 클래스의 함수들을 정의합니다. 이때, BPI_Weapon을 C++의 정통적인 인터페이스 클래스라고 생각하기 보다, 말 그대로 하위 클래가 아닌 몇 개의 클래스들이 공통적으로 사용하는 프로퍼티 혹은 행동 집합을 모아놓는 "인터페이스"이자, 하위 클래스들이 상속도 가능한 혼합적인 형태로 보입니다.
오버라이딩
1. 인터페이스 메서드 정의
1. 인터페이스의 함수 목록
BPI_Weapon에서 생성한 인터페이스 함수들의 목록은 블루프린트 에디터 왼쪽 하단에서 발견할 수 있습니다.
2. 인터페이스 함수 오버라이딩
인터페이스 목록의 함수들을 용도에 맞게 정의해 주어야 합니다.
Weapon 블루프린트 클래스
1. Weapon 블루프린트 생성
2. BP_Weapon으로 BPI_Weapon의 함수들 가져오기
앞서, BPI_Weapon에서 생성한 함수 목록들을 BP_Player에서 오버라이딩 했습니다. BP_Weapon은 오버라이딩한 인터페이스 함수들을 동명의 함수 내부에서 호출해줍니다. 부가적으로, 추후에 구현할 Weapon 변경 관련 이벤트들을 위해서 공격 방식 클래스들 중 가장 상위 클래스인 BP_Weapon에서 "On Selected(선택된 무기)" 커스텀 이벤트와 "OffSelected (선택 해제된 무기)" 커스텀 이벤트를 미리 생성해 둡니다.
3. 인터페이스 함수 호출
1. Get Owner
무기의 소유자, 즉 BP_Player를 호출하여 "인터페이스 함수"의 오버라이딩 여부를 확인합니다.
2. Does Implement Interface
단순히, Test Object에서 인터페이스를 정의했는지 체크하기 위함입니다.
3. Get Weapon State
Does Implement Interface 노드가 "True"를 리턴하면 미리 BP_Player에서 구현한 인터페이스 함수들을 호출하도록 합니다.
4. BP_Player -> BP_Weapon 옮겨지는 함수들
1. CanAttack 함수
BP_Player에서 미리 구현했던 "공격 가능 여부"를 체크하는 "CanAttack" 함수를 BP_Weapon으로 옮깁니다.
2. SendDamage 함수
BP_Sword에서 미리 구현했던 "Damage 전달" 관련 이벤트를 BP_Weapon의 Send Damage 함수로 옮깁니다.
Combo, 콤보 클래스
1. 콤보 클래스 생성 및 부모 클래스 세팅
클래스 세팅 -> Parent Class : BP_Weapon으로 변경합니다.
2. BP_Player의 Combo관련 변수들 -> BP_Combo
BP_Player의 "Combo" 관련 변수들을 모두 BP_Combo로 옮깁니다.
1. Combo Table : Combo 애님 몽타주 정보를 담고 있는 데이터 테이블
2. Combo Montages : Combo Table로부터 가져온 몽타주 정보를 담고 있는 구조체
3. Exist Next Combo
4. Enable Next Combo
5. Last Combo
3. BP_Player의 Load Sword Combo Table 이벤트 그룹 가져오기
앞서 BP_Player에서 정의한 Combo 애님 몽타주 애셋 정보들을 Load 하는 이벤트를 BP_Combo로 가져와야겠죠!
BP_Combo도 시작과 동시에 필요하기 때문에, BeginPlay이벤트로 구현합니다.
4. BP_Player의 Attacking Event -> Sword Event 그룹 가져오기
미리 BP_Player에서 구현한 Sword의 일반 공격 및 콤보 공격 관련 이벤트 그룹을 모두 BP_Combo로 이전합니다. 더불어, 기존의 노드들 중 우리가 BPI_Weapon을 통해 생성한 인터페이스 함수 목록들과 기능이 중복되는 노드들을 발견할 수 있습니다. "Set Can Move"와 "Set State"는 인터페이스 함수들로 대체하도록 합니다.
5. BP_Player의 Play Combo Montage 함수 -> BP_Combo로 가져오기
미리 생성한 FCombo Montage 구조체를 담고 있는 배열들을 불러와 Play Anim Montage를 호출합니다!
Sword
1. BP_Sword 수정
1. BeginPlay 이벤트
기존의 "Set Collision Enabled" 호출과 충돌 관련 이벤트, "Component Begin Overlap"이벤트 호출을 수정합니다.
먼저, 상위 클래스 "BP_Weapon"이 제공하는 함수 "SetCombat"을 통해 Combat Type 상태를 변경합니다.
그리고, "BP_Combo"에서 수행하는 "Combo Table" 정보를 로딩하는 과정에서 "Sword"의 애님 몽타주들의 정보를 정상적으로 로딩하도록 Combo Table의 값을 변경합니다!
2. Begin Overlap
On Component Begin Overlap(충돌) 이벤트는 간단하게 "BP_Weapon"에서 미리 구현한 Send Damage 함수를 호출하도록 합니다.
'게임개발 > Unreal 블루프린트' 카테고리의 다른 글
[Unreal_블루프린트]#22_Wizard Skills (1) | 2022.09.26 |
---|---|
[Unreal_블루프린트]#21-2_Interface, No Combo (1) | 2022.09.25 |
[Unreal_블루프린트]#20_Magical Attack (0) | 2022.09.16 |
[Unreal_블루프린트]#19_Wizard Animation (0) | 2022.09.15 |
[Unreal_블루프린트]#18_Combat Style, Sword Mode, Wizard Mode (0) | 2022.09.14 |