编写接口

使用 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 转换到接口类来调用具体的接口,但这种方式对在蓝图中添加或继承的接口不起作用。

尝试在某个未实现该接口的类上调用接口不会失败。


参考