UE4接口

发布时间 2023-11-20 17:04:23作者: XTG111

官方链接

目的

不同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++实现) 说明,而且函数不能为虚拟的。