跳到主要内容

extension_methods

扩展函数

!!这特性现已经不推荐,推荐性能更好的静态绑定

UE有很多C++函数没有UFUNCTION标记,这种API要怎么调用呢?方式有两种:

  • 扩展函数,这是推荐的方式
  • 用Puerts一个未发布的代码生成器生成wrap代码

以UObject::GetClass和UObject::FindFunction为例

C++扩展

//ObjectExtension.h
UCLASS()
class UObjectExtension : public UExtensionMethods
{
GENERATED_BODY()

UFUNCTION(BlueprintCallable, Category = "ObjectExtension")
static UClass *GetClass(UObject *Object);

UFUNCTION(BlueprintCallable, Category = "ObjectExtension")
static UFunction* FindFunction(UObject *Object, FName InName);
};
//ObjectExtension.cpp
#include "ObjectExtension.h"

UClass * UObjectExtension::GetClass(UObject *Object)
{
return Object->GetClass();
}

UFunction* UObjectExtension::FindFunction(UObject *Object, FName InName)
{
return Object->FindFunction(InName);
}

要点:

  • 新建一个类继承自UExtensionMethods
  • 扩展函数的参数1就是被扩展类

在TypeScript访问时,跟访问一个对象的成员方法类似

  • ps,新增扩展函数需要重新生成声明文件
let cls = obj.GetClass();
let func = obj.FindFunction("Func");