[特殊字符] Unreal Engine 接口 (Interface) 知识总结
伤害系统:子弹命中任何实现 Damageable 接口的对象,都能调用 ApplyDamage。交互系统:玩家调用 Interact(),门、NPC、道具各自实现不同逻辑。Cast To 子类:把 Actor 转成具体类,访问类特有的变量/函数。Cast To 接口:检查对象是否实现接口,如果是,就能调用接口函数。让你在 不知道对象具体类型 的情况下,也能调用它的某些功能。AI 通信:不同 NPC
- 接口的作用
提供一组 通用函数声明,不同的类可以实现这些函数。
让你在 不知道对象具体类型 的情况下,也能调用它的某些功能。
类似于 C++ 的纯虚类,但在 UE 里增加了对 蓝图 的支持。
👉 好处:写一套逻辑适配不同对象,减少耦合。
- 接口的结构
UE 接口分为两部分:
U 接口类(继承自 UInterface)
负责反射系统、蓝图暴露。
例如 UInteractable。
I 接口类(纯虚基类)
写函数声明,子类实现。
例如 IInteractable。
- 声明接口
UINTERFACE(Blueprintable)
class UDamageable : public UInterface
{
GENERATED_BODY()
};
class IDamageable
{
GENERATED_BODY()
public:
UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category=“Damage”)
void ApplyDamage(float Amount);
};
说明:
UINTERFACE → 声明 U 类,可用于蓝图。
IXXXX → 写方法声明。
BlueprintNativeEvent → 可 C++ 实现,也可蓝图覆盖。
- 实现接口
class AEnemyCharacter : public ACharacter, public IDamageable
{
GENERATED_BODY()
public:
virtual void ApplyDamage_Implementation(float Amount) override;
};
C++:实现时要写 函数名_Implementation。
蓝图:直接覆盖接口函数。
- 调用接口函数
5.1 C++ 调用
AActor* HitActor = HitResult.GetActor();
if (HitActor->GetClass()->ImplementsInterface(UDamageable::StaticClass()))
{
IDamageable::Execute_ApplyDamage(HitActor, 10.0f);
}
ImplementsInterface → 检查对象是否实现接口。
Execute_ApplyDamage → 调用接口函数(自动支持 C++ / 蓝图)。
5.2 蓝图调用
节点:Does Implement Interface
成功 → 直接调用接口函数。
- Cast 与接口
Cast To 子类:把 Actor 转成具体类,访问类特有的变量/函数。
Cast To 接口:检查对象是否实现接口,如果是,就能调用接口函数。
👉 区别:
Cast 子类 → 依赖具体类(耦合度高)。
Cast 接口 → 只依赖接口(更解耦)。
- 常见使用场景
伤害系统:子弹命中任何实现 Damageable 接口的对象,都能调用 ApplyDamage。
交互系统:玩家调用 Interact(),门、NPC、道具各自实现不同逻辑。
AI 通信:不同 NPC 实现统一的命令接口,方便统一调用。
✅ 总结
UE 接口是 解耦合的调用机制:
定义一组通用方法 → 不同类去实现。
使用时不用关心对象具体类型 → 只要实现接口,就能统一调用。
C++ 和蓝图通用,Execute_XXX 负责调用。
更多推荐
所有评论(0)