目的
不同Actor对象具有同一个功能,比如角色按F键可以实现开门,开车,与NPC沟通等操作。其本质就是让所有的Actor对象除了继承UObject以外,再继承这个接口类。
接口的声明
宏的改变:UCLASS -> UINTERFACE
父类的改变:UObject -> UInterface
在C++中利用引擎创建的接口类实际上是一个空白类,它的作用是将该接口暴露给UE的反射系统。具体的实现是需要在这个接口类中定义一个新的类,并且有严格的命名要求,相同的类名以及将U变为I。然后在这个IInterfaceName的类中编写函数实现。其他继承的也是这个类中的函数(public IInterfaceName)。
#pragma once
#include "ReactToTriggerInterface.generated.h"
UINTERFACE(MinimalAPI, Blueprintable)
class UReactToTriggerInterface : public UInterface
{
GENERATED_BODY()
};
class IReactToTriggerInterface
{
GENERATED_BODY()
public:
/** 在此处添加接口函数声明 */
//方法必须为public才能被继承
};
接口函数的声明和使用
接口类只提供功能,具体实现方式需要在继承的Actor类中编写
在接口类中定义虚函数,然后再继承类中覆盖。
//在接口类的IInterfaceName类中
public:
virtual void Func1();
//.cpp
void IInetrfaceName::Func1(){};
//在继承该接口的Actor类中
class AActor:public IInterfaceName
{
public:
virtual void Func1() override;
};
//.cpp
void AActor::Func1(){Func;};
如果要实现在蓝图中可以调用需要添加UFUNCTION(BlueprintCallable),还必须使用 BlueprintImplementableEvent(只能在蓝图中实现) 或 BlueprintNativeEvent(可以在蓝图或C++实现) 说明,而且函数不能为虚拟的。
标签:Func1,void,接口,Actor,UE4,接口类,public,类中 From: https://www.cnblogs.com/XTG111/p/17838321.html