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

[42강] Interface

whereareyoung 2024. 7. 29. 23:26

이번시간에는 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