lua ue_UnLua解析(二)使用Lua函数覆盖C++函数

相关文章:南京周润发:UnLua解析(一)Object绑定lua 南京周润发:UnLua解析(三)Lua访问Object的property和function 南京周润发:UnLua解析(四)数据在C++和lua间的相互传递 南京周润发:UnLua解析(五)Delegate实现 之前介绍了UnLua中UObject的绑定,简单提过UFunction绑定,在此介绍下其中细节。使用lua的一个主要原因就...
摘要由CSDN通过智能技术生成

bec057318ed64cca9613dea4c41d52f8.png

相关文章:

南京周润发:UnLua解析(一)Object绑定lua

南京周润发:UnLua解析(三)Lua访问Object的property和function

南京周润发:UnLua解析(四)数据在C++和lua间的相互传递

南京周润发:UnLua解析(五)Delegate实现

之前介绍了UnLua中UObject的绑定,简单提过UFunction绑定,在此介绍下其中细节。

使用lua的一个主要原因就是想替换蓝图,把一些本来在蓝图中实现的函数由lua实现,使游戏功能可以灵活修改。

UnLua支持BlueprintEvent和RepNotify类型函数的覆盖。

FFunctionDesc

被替换的UFunction会有一个对应的FFunctionDesc结构体,全局的GReflectionRegistry中有个叫做Functions的map容器,记录了UFunction和FFunctionDesc的对应关系。FFunctionDesc是UFunction与lua函数的桥梁,缓存了一些元信息,对提升效率有很大帮助。

Ufunction *Function:对应UFunction信息

FParameterCollection *DefaultParams:默认参数信息

int32 FunctionRef:lua中对应函数地址

TArray<FPropertyDesc*> Properties:函数的参数描述列表

FPropertyDesc

FFunctionDesc有一个属性为Properties,它是一个FPropertyDesc类型的数组,用于存储该Function的参数信息,而FPropertyDesc则用于描述每一个函数参数。FPropertyDesc不仅在FuncDesc中使用,在ClassDesc中也有,使用非常广泛。

FPropertyDesc只是一个基类,不同类型的属性会有不同的子类描述,比如int,float类型等等,它们通常会覆写GetValueInternal方法和SetValueInternal方法,这些方法用于和lua交互。

常用方法:

GetValueInternal():lua获取属性值的接口,根据属性类型使用不同的push方式。Integer等基本类型会直接push值,而像UObject类型会push一个UserData。

SetValueInternal():lua中给属性赋值接口,从lua栈中取出lua中设置的值,给属性设置上,因此自然也要根据不同类型区分。

调用覆盖的UFunction

被lua覆盖的UFunction,其字节码已经被替换,具体替换步骤如下:

/**
 * 1. Replace thunk function
 * 2. Insert special opcodes if necessary
 */
void OverrideUFunction(UFunction *Function, FNativeFuncPtr NativeFunc, void *Userdata, bool bI
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值