新增功能:
- 优化Array元素为struct类型的遍历,新增PairsLessGC API,使用PairsLessGC遍历时,只会生成一个userdata且复用它。
- Array、Set遍历支持反向遍历。
- lua值复制支持:REPNOTIFY_Always 选项,当它生效时,DS端的赋值无论值是否改变都会通知客户端.
示例:
local LuaActor ={}
function LuaActor:GetLifetimeReplicatedProps()
local ELifetimeCondition = import("ELifetimeCondition")
return {
{ "HP", ELifetimeCondition.COND_None, EPropertyClass.Float, RepNotifyCondition = 1},
}
end
return Class(nil, nil, LuaActor)
- LuaWrapper里面导出的类型,原本有"+"、"-"、"*"、"/"等操作支持的,分别增加add、sub、mul、div等API,区别在于操作符运算结果返回会新增一个userdata,而add、sub、mul、div等会把结果加到自身以减少对象生成减少GC压力。
local A = FVector(1,2,3)
local B = FVector(2,3,4)
print(A, A:add(B)) --地址将会是A、A
print(A、A+B) --地址将会A和一个新对象
- 调用有返回值的UFunction函数,支持多传一个额外参数接收返回结果,以减少对象生成减少GC压力。
- Delegate的绑定支持直接绑定UObject和它的UFunction,且它们无须手工解绑,范例:
-- 绑定操作,如果是单播Delegate则用Bind替代Add
Button.OnClicked:Add(UIRoot, "OnButtonClickedBlueprintFunction")
--解绑操作,一般不需要
Button.OnClicked:Remove(UIRoot, "OnButtonClickedBlueprintFunction")
机制优化或者bug fixed:
- Array、Set等普通遍历,比之前少生成一个对象。
- Array、Set、Map等类型参数检查加强:之前没有检查它们的内部元素是否匹配,现在改为严格匹配内部元素。
- 修复checkUInterfaceProperty函数的错误提醒格式,之前可能会导致崩溃。
- 修复可能存在的UObject的lua函数存在判定错误。
- LuaWrapper导出的类型,访问它的static变量时,只生成一份数据
- Fixed #587 #589 #590
- Delegate返回值由lightuserdata改为int64类型。
- 优化访问Delegate类型成员变量,不再每次访问都生成一个userdata
- 加速SimpleString的hash计算
- 修复Lua值复制DS端赋值同样的变量(REPNOTIFY_OnChanged条件下),可能导致变量不变但是也通知到客户端的bug
- 修复UObject按Instance Hook比CDO类函数多的时候,可能会导致前者函数Hook被跳过的bug
- lua支持到5.4.3版本
- 补全UE5.1/5.2下缺失的LuaWrapper API
- 完整适配 Unreal Engine 5.4
Full Changelog: 2.1.3...2.1.4