Appearance
接口
陈述功能,一定程度上"去掉了"多继承。解决不同类型但有相同行为的特性。
C++支持多继承。
创建与编写
从已有类中找到UNREAL接口并创建即完成创建。
接口如果想在蓝图中使用,可以在UCLASS中加入Blueprintable,不想使用则加NotBlueprintable。
接口在蓝图中被继承需要注意以下问题:
- 如果函数没有返回类型,则在蓝图中当作事件Event使用
- 如果函数存在返回类型,则在蓝图中当作函数使用(需要在函数的overlap中寻找)
- 函数说明如果使用BlueprintNativeEvent则必须在继承类中定义函数(同名后缀_Implementation),如果使用BlueprintImplementableEvent修饰,则可以选择性重写。
创建完成后的代码会分成U开头的类块和I开头的类块。U开头的类块不动,只在I开头的类块中写逻辑,且所有内容都在public修饰符下。
cpp
// 接口文件中
void NotifyHurt(int32 Value);
// myactor类中
virtual void NotifyHurt_Implementation(int32 Value) override;
// CPP文件中
AMyActor* my1 = GetWorld()->SpawnActor<AMyActor>(AMyActor::StaticClass()); // 构建对象
IHurtInterface* Interface = Cast<IHurtInterface>(my1); // 检查当前对象是否继承了接口
if(Interface)
{
Interface->Execute_NotifyHurt(my1, 20);
}