1. 인터페이스(Blueprint Interface)란?
1.1 인터페이스의 개념
- 인터페이스는 함수 선언부만 모아둔 설계도입니다.
- 구현(Implementation)이 없는 함수 모음이며, 이를 다른 블루프린트에 추가하여 각 블루프린트마다 고유한 방식으로 함수를 구현할 수 있습니다.
- 핵심 목적: 서로 다른 블루프린트 간의 명확한 메시지 전달 및 유연한 함수 공유를 가능하게 합니다.
1.2 필요성
기존 방식인 Cast:
- 여러 블루프린트 간 함수를 호출할 때, 일일이 Cast를 사용해야 했습니다.
- 이 방식은 불편하고, Cast 대상의 모든 변수와 함수를 참조해야 하는 성능 낭비가 발생합니다.
인터페이스의 장점:
- 직접 참조 없이 다른 블루프린트의 함수를 호출할 수 있습니다.
- 객체 간의 유형 구분 없이 공통 함수 호출이 가능합니다.
2. 인터페이스 사용 단계
2.1 블루프린트 인터페이스 생성하기
-
Blueprint Interface를 생성합니다.
- 경로: Blueprints → Blueprint Interface 클릭.
- 예시: 인터페이스 이름 BP_Hello.
-
함수 추가:
- 인터페이스 안에 원하는 함수를 생성합니다.
- 예시: 함수 이름 TriggerEventExample.
- 중요: 이 단계에서는 함수에 로직(기능)이 없습니다. 선언만 이루어집니다.
2.2 인터페이스 추가하기
- 인터페이스를 사용할 블루프린트에 추가합니다.
- Class Settings → Interfaces 섹션에서 인터페이스 추가.
- 예시: 캐릭터 블루프린트에 BP_Hello 인터페이스를 추가.
- 결과:
- 추가된 인터페이스는 해당 블루프린트에 함수 목록으로 나타납니다.
2.3 인터페이스 함수 구현하기
인터페이스를 추가한 블루프린트에서는 반드시 해당 인터페이스의 함수를 구현해야 합니다.
-
Event Graph에서 함수 구현:
- 우클릭 → Add Event → 인터페이스 함수 선택.
- 예시: TriggerEventExample 이벤트 추가.
-
로직 추가:
- 이벤트 핀에 노드를 연결하여 동작을 구현합니다.
- 예시: Print String 노드를 연결해
"HAHAHA"
메시지를 출력.
2.4 인터페이스 함수 호출하기
인터페이스 함수를 호출할 때 Interface Message 노드를 사용합니다.
-
Interface Message 노드:
- Target 입력 핀에 인터페이스가 구현된 블루프린트의 인스턴스를 제공합니다.
- 인터페이스를 구현하지 않은 블루프린트에 호출하면 아무 동작도 하지 않음.
-
로직 예시:
- 캐릭터가 큐브와 Overlap 이벤트 발생 시:
BP_Hello
인터페이스의 TriggerEventExample 함수 호출.
- 결과: "HAHAHA" 메시지 출력.
3. 블루프린트 인터페이스의 특징
3.1 함수와 이벤트의 차이점
- 이벤트: 특정 조건(예: 충돌, 키 입력 등)에 의해 실행됩니다.
- 함수: 하나의 기능을 정의하며 시작 → 끝까지 한 번에 실행됩니다.
3.2 인터페이스 함수 덮어쓰기(Override)
인터페이스를 구현한 블루프린트마다 함수의 고유한 로직을 정의할 수 있습니다.
- 예시:
BP_Hello
의 TriggerEventExample 함수를 구현:
- 캐릭터 블루프린트:
"HAHAHA"
출력.
- 박스 블루프린트:
"Box Overlapped!"
출력.
- 동일한 함수 호출이지만 각각 다른 로직을 수행합니다.
4. 다른 블루프린트에서 인터페이스 함수 호출하기
4.1 호출 조건
- 두 블루프린트 모두 같은 인터페이스를 구현해야 합니다.
- 호출하는 블루프린트에서 대상 블루프린트의 인스턴스를 알고 있어야 합니다.
4.2 노드 종류
- Call Function:
- Interface Message:
- 다른 블루프린트의 인스턴스를 대상으로 인터페이스 함수를 호출합니다.
- 대상 블루프린트가 인터페이스를 구현하지 않은 경우 조용히 실패합니다.
4.3 예시
- 캐릭터가 박스와 Overlap 이벤트 발생.
- 인터페이스 메시지 노드를 사용해
BP_Hello
인터페이스의 함수를 호출.
- 박스 블루프린트에서
"Box Overlapped!"
메시지를 출력.
5. 인터페이스의 활용 사례
-
다양한 객체에 동일한 기능 적용:
- 차량과 나무 같은 다른 유형의 객체에 공통적으로 대미지를 입히는 기능 구현.
-
충돌 이벤트 처리:
- 총알이 여러 객체(플레이어, 적 NPC 등)에 충돌 시:
- 인터페이스를 통해 공통된 대미지 처리 함수를 호출.
- 필요에 따라 각 객체마다 다른 대미지 로직 구현.
-
태그와 함께 사용:
- 특정 태그(예:
Friendly
)를 가진 객체만 이벤트를 처리하도록 구분.
6. 인터페이스의 장점
-
다중 상속의 안전한 대안:
- 인터페이스는 구현부가 없으므로 다중 상속의 문제(죽음의 다이아몬드)를 방지합니다.
-
유연성:
- 서로 다른 블루프린트 간에 공통 기능을 정의하고 확장할 수 있습니다.
-
코드의 재사용성:
- 동일한 인터페이스를 여러 블루프린트에 추가해 공통된 기능을 쉽게 공유합니다.
-
성능 효율성:
- 직접 참조 없이 메시지 전달이 가능하므로 성능 낭비를 줄입니다.