跳到主要内容

介绍

基于UE的反射机制能够访问到被标记反射的类,变量和函数,但是还是存在部分类由于不是UE支持的反射类型,或者类,变量和函数并没有被标记反射而导致访问不到。针对这种情况,提供了静态导出,拓展了支持的类,变量和函数,同时也可以用于优化变量访问和函数调用的效率。


枚举

静态导出枚举时,会通过std::underlying_type_t拿到UnderlyingType并生成,保证C++和C#两侧内存大小一致。

示例:枚举
enum ERawTestEnum
{
RawTestEnumZero,
RawTestEnumOne,
RawTestEnumTwo
};

类/结构体

静态导出时,不区分类或者结构体,但是区分反射和非反射类型,需要通过不同的模板来导出。除了常规的导出变量和函数,还支持一些额外的操作。

  • 构造函数
  • 函数重载
  • 继承
  • 静态变量
  • 一元操作符,!,+,-,~,++,--
  • 二元操作符,+,-,*,/,%,&,|,^,<<,>>,==,!=,<,<=,>,>=
  • 下标运算符,[]
示例:类/结构体
#pragma once

class FTestBindingFunction
{
public:
FTestBindingFunction();

public:
void SetInt32ValueFunction(int32 InInt32Value);

int32 GetInt32ValueFunction() const;

void OutInt32ValueFunction(int32& OutInt32Value) const;

public:
int32 Int32Value;
};

通过UHT生成

通过UHT,根据配置的模块或者插件,自动生成静态绑定代码。

示例:引用静态绑定文件
#if WITH_BINDING
#include "Binding/Class/PreHeader.h"
#include "Engine.header.inl"
#include "UMG.header.inl"
#endif

示例

Source/UnrealCSharp/Private/Domain/InternalCall下有不少示例,如FRegisterVector