Blueprint Interface

클래스가 아니라 구현한 능력을 향해 메시지를 보낸다

발사체는 적인지 플레이어인지 알 필요가 없습니다. 대상이 BPI_Damageable 계약을 구현했는지만 확인하고, ApplyDamage (Message)를 보냅니다.

contract
Interface BPI_Damageable
Function ApplyDamage
Input pin DamageAmount: Float

BP_Projectile에서 연결되는 노드 순서

Event Hit

Other Actor 확보

충돌한 액터 레퍼런스를 메시지 대상 후보로 둡니다.

Interface Check

Does Implement Interface

대상이 BPI_Damageable을 구현했는지 불리언으로 확인합니다.

Branch True

Message 호출

참일 때만 ApplyDamage (Message)에 Target과 DamageAmount를 연결합니다.

False

대상 제외

구현하지 않은 액터는 캐스팅이나 접근 없이 그대로 통과시킵니다.

같은 메시지, 다른 구현

대상 액터
구현 위치
실행되는 이벤트
결과
BP_Enemy
Class Settings에 BPI_Damageable 추가
Event ApplyDamage
CurrentHealth에서 DamageAmount 차감
BP_PlayerCharacter
같은 인터페이스를 별도 클래스에 구현
Event ApplyDamage
방어막, 체력, 피격 효과를 플레이어 규칙대로 처리
StaticMeshActor
인터페이스 미구현
실행 이벤트 없음
Branch의 False 경로로 빠져 안전하게 무시

이 방식이 느슨한 결합이 되는 이유

01 Cast를 줄임 발사체는 대상 클래스 이름을 몰라도 됩니다.
02 새 구현체 추가 상자나 문도 인터페이스만 구현하면 같은 메시지를 받을 수 있습니다.
03 호출자 수정 최소화 대상별 처리 차이는 각 클래스의 이벤트 구현 안에 머뭅니다.