编写接口
使用 C++ 编写 Unreal Engine 接口需要编写两个带有不同前缀的类:
// USGameplayInterface 中不需要编写其他内容。它仅仅是将接口暴露给反射系统。
UINTERFACE(MinimalAPI)
class USGameplayInterface : public UInterface
{
GENERATED_BODY()
};
// 这是实际的接口类,使用 I 前缀。
class ACTIONROGUELIKE_API ISGameplayInterface
{
GENERATED_BODY()
public:
UFUNCTION(BlueprintCallable, BlueprintNativeEvent)
void Interact(APawn* InstigatorPawn);
};实现接口
实现接口时,继承 I 前缀类,并为实现的方法添加 _Implementation 后缀:
UCLASS()
class ACTIONROGUELIKE_API ASItemChest : public AActor, public ISGameplayInterface
{
GENERATED_BODY()
void Interact_Implementation(APawn* InstigatorPawn);
}使用接口
检查一个类是否实现了某一接口,使用 U 前缀类:
if (MyActor->Implements<USGameplayInterface>())
{
// ...
}使用接口时,调用 I 前缀类的静态方法,方法名称有 _Interact 后缀:
ISGameplayInterface::Execute_Interact(MyActor, MyParam1);还可以将 Actor 转换到接口类来调用具体的接口,但这种方式对在蓝图中添加或继承的接口不起作用。
尝试在某个未实现该接口的类上调用接口不会失败。