이번시간에는 interface 사용방법에 대해 알아볼 것이다.
- Interface 가 어떻게 "사용" 되는지
- Interface 가 어떻게 "그룹" 지어지는지
- Interface 가 어떻게 "호출" 되는지
BP_Player와 BP_Enemy 는 Character 라는 부모로부터 상속을 받았지만, 둘다 공통적인 역할을 Character 에 넣을수 없기 때문에 Interface 를 이용해 연관관계를 지어 줄 것이다.
인터페이스는 상속을 건드릴 수 없을때 사용한다.
예를들어, 적은 Character 이고, 물체는 Actor 이고, 또 다른 애는 Pown 이고 이런상황에서도 인터페이스로 다 같이 묶어 연관관계를 지어주어 영향받에 할 수있다. 물론 Actor 에 넣을 수 도 있는데, Actor 는 건드릴 수 없기 때문이다. 그리고 Actor를 건드는것은 좋은 방법이 아니다.
1. 블루프린트 > 블루프린트 인터페이스 > "BP_IWeapon" Rename
2. BP_Player는 Combat, State를 가지고 있는데, BP_Enemy에도 Combat, State를 넣어 줄것이다.
BP_Enemy 변수에 Estate Type 자료형 변수 "State", Ecombat Type 자료형 변수 "Combat" 을 생성한다.
3. BP_IWeapon > 함수이름 "GetCharacterState" 로 변경 >출력 Estate Type 형 "State" 로 변경 후 다음과 같이 세팅
Get Character State 함수는 순수가상함수라고 해서 혼자서는 어떠한 역할도 못한다. 그런데 상속받아서 자기 필요한대로 리턴해주는 작업을 할 수 있다.
4. BP_Enemy > 클래스 세팅
다음과 같이 부모 클래스도 바꿀수 있고, 인터페이스도 넣어줄 수 있다. BP_Iweapon 인터페이스를 넣어준다.
5. BP_Enemy > 컴파일 후 나갔다 들어오면 다음과 같이 "GetCharacterState"인터페이스가 생성되어있다. 다음과 같이 세팅하여 준다.
6. BP_Player > 다음과 같이 인터페이스 세팅
7. BP_Player > Get Character State 인터페이스 다음과 같이 세팅
인터페이스 사용 테스트
1. 블루프린트 클래스 > Actor 생성 > "BP_InterfaceTest" Rename
2. BP_Enemy > Get Character State > State - "Attacking" 으로 변환
3. BP_InterfaceTest 다음과 같이 세팅
BeginPlay 때 Owner 를 지정해주고 자신의 부모가 특정 Interface 로 상속되느냐 확인하여 상속된다면, 그 함수를 호출
* Does Inplement Interface : 해당 인터페이스로부터 상속받았는지를 검사
3. BP_Enemy > 이벤트 그래프 다음과 같이 세팅
4. BP_Player > 이벤트 그래프 > Begin Play Event > 다음 부분 노드접기 > "Spawn&Attach HandFire" Rename
제일 상단 Spawn&Attach > "Spawn&Attach Sword" Rename
5. BP_Player > 이벤트 그래프 > Begin Play Event > 핀 추가 후 이전에 작업했던 부분 붙여넣기 하여 다음과 같이 세팅
6. 플레이 하면 다음과 같이 출력되는 것을 확인 할 수 있다. 인터페이스 시스템이 정상적으로 작동한다.
Interface 라는 연관관계를 통해 BP_Player 와 EP_Enemy 에서 동시에 호출되는것을 확인가능하다.
인터페이스는 그룹으로 묶기위해 사용이라고 까지만 정리해두면 된다.
7. 테스트 마침
1) BP_Player > 이벤트그래프 > Begin Play Event > 노드접기 "InterfaceTest" Rename, 노드 끊어놓기
2) BP_Enemy > 이벤트 그래프 > Begin Play Event > 노드접기 "InterfaceTest" Rename, 노드 끊어놓기
이제 인터페이스 구현이 완료되었으니 무기를 구현하여 보도록 할 예정이다.
1. 노랑 부분 구현
2. 파랑 부분 구현
3. 분홍 부분 기존 구조에 추가하여 구현
Weapon 구현
1. BP_IWeapon > "Get Character Combat" 함수 생성 > 출력에 ECombat Type "Combat" 추가 > 다음과 같이 세팅
"Set Character State" 함수 생성 > 출력에 EState Type "State" 추가 > 다음과 같이 세팅
"Set Character Combat" 함수 생성 > 출력에 E Combat Type "Combat" 추가 > 다음과 같이 세팅
인터페이스에 소속되는 함수들은 반드시 리턴이 있어야 상속받은 자식에서 사용할 수 있도록 나타남
2. BP_Enemy, BP_Player > 인터페이스 Get Character Combat, Get Character State 다음과 같이 세팅
BP_Enemy, BP_Player > 인터페이스 Set Character Combat, Set Character State 다음과 같이 세팅
* Result 의미 없으니 비워두기
3. 블루프린트 클래스 > Actor > "BP_Weapon" Rename
4. Float 형 변수 Power 생성
5. 함수 "GetState" 생성, 다음과 같이 생성, 퓨어 활성화
5. 함수 "GetCombat" 생성, GetState 함수에서 복사하여 다음과 같이 생성, 퓨어 활성화
다음시간에 Set 부분 만들고 무기처리에 대해 더 진행해 갈 예정이다.
무기 구현이 조금 기간이 걸릴것 같지만 기대가 된다!
'Unreal Engine > 게임클래스 - 언리얼엔진 기초' 카테고리의 다른 글
[44강] Inherit Combo (0) | 2024.08.05 |
---|---|
[43강] Inherit Weapon (0) | 2024.07.31 |
[41강] Inherit Weapon Diagram (0) | 2024.07.26 |
[40강] Attach Particle System (0) | 2024.07.25 |
[39강] FireBall Overlap Event (0) | 2024.07.24 |