{"id":15033206,"url":"https://github.com/tencent/sluaunreal","last_synced_at":"2025-05-14T05:10:32.014Z","repository":{"id":37359310,"uuid":"142866337","full_name":"Tencent/sluaunreal","owner":"Tencent","description":"lua dev plugin for unreal engine 4 or 5","archived":false,"fork":false,"pushed_at":"2025-02-25T04:47:49.000Z","size":37733,"stargazers_count":1848,"open_issues_count":107,"forks_count":431,"subscribers_count":103,"default_branch":"master","last_synced_at":"2025-04-11T15:57:04.079Z","etag":null,"topics":["lua","plugin","slua","unreal","unreal-engine","unreal4"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Tencent.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.TXT","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2018-07-30T11:27:14.000Z","updated_at":"2025-04-10T15:26:02.000Z","dependencies_parsed_at":"2024-01-15T02:28:49.006Z","dependency_job_id":"e10724ea-3857-4a1e-b3ca-6fe9d2cfa0ca","html_url":"https://github.com/Tencent/sluaunreal","commit_stats":null,"previous_names":[],"tags_count":28,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tencent%2Fsluaunreal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tencent%2Fsluaunreal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tencent%2Fsluaunreal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tencent%2Fsluaunreal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Tencent","download_url":"https://codeload.github.com/Tencent/sluaunreal/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254076850,"owners_count":22010611,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["lua","plugin","slua","unreal","unreal-engine","unreal4"],"created_at":"2024-09-24T20:20:23.715Z","updated_at":"2025-05-14T05:10:31.993Z","avatar_url":"https://github.com/Tencent.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"## What's slua-unreal?\n\nSlua-unreal is an unreal4 plugin, which allows you to use Lua language to develop game logic and hot fix your code. It gives you 3 ways to wrap your C++ interface to Lua, including reflection by blueprint, C++ template and static code generation. It also enables a two-way communication between blueprint and Lua.  The advantage of Lua over C++ is that it requires no compilation for logic change, which significantly speeds up game development process.\n\n# slua-unreal 是什么 \n\nslua-unreal作为unreal引擎的插件，通过unreal自带蓝图接口的反射能力，结合libclang静态c++代码分析，自动化导出蓝图接口和静态c++接口，提供给lua语言，使得可以通过lua语言开发unreal游戏业务逻辑，方便游戏高效迭代开发，上线热更新，同时支持lua到c++双向，lua到蓝图双向调用，使用lua语言完美替代unreal的c++开发方式，修改业务逻辑不需要等待c++编译，大大提升开发速度。\n\n目前该项目作为腾讯PUBG手游和潘多拉系统，该系统用于腾讯UE4游戏业务，帮助游戏业务构建周边系统、运营系统，上线质量稳定。\n\n欢迎issue，pr，star，fork。\n\n\n## Showcases\n\n![icon_logo](https://user-images.githubusercontent.com/6227270/59747641-db6e1b80-92ab-11e9-81b6-7ca7ebfd6c0e.png)![logo](https://user-images.githubusercontent.com/6227270/59747461-80d4bf80-92ab-11e9-989b-44809d5b780c.png)\n\nSlua-unreal is currently adopted in PUBG mobile game, one of Tencent’s most-played and highest-grossing mobile games, and Pandora system. This system is widely used in Tencent’s UE4 gaming business, helping the business build and maintain its commercial operation system.\n\n## What's new?\n\n[Release 1.3.3](https://github.com/Tencent/sluaunreal/releases/tag/1.3.3), fix a crash bug, more stable\n\n[Release 1.3.2](https://github.com/Tencent/sluaunreal/releases/tag/1.3.2), fix building error on UE 4.24\n\n[Release 1.3.1](https://github.com/Tencent/sluaunreal/releases/tag/1.3.1)\n\nAdd [a branch](https://github.com/Tencent/sluaunreal/tree/for_4.25) to support UE 4.25 or later\n\n## Features\n\n* Automatic export of blueprint API to the Lua interface \n* Supporting RPC (Remote Procedure Call) functions\n* Overriding any blueprint function with a Lua function\n* Calling Lua functions as callback functions for blueprint events\n* Normal C++ functions and classes exported by C++ template \n* Auto code generation to wrap your normal C++ function for use in Lua\n* Supporting enum, FVector etc\n* Operator overloading in FVector or other struct class\n* Allowing manual addition of a non-blueprint function to UObject\n* Calling Lua functions from blueprint, vice versa\n* Dead loop detection and error reporting when a dead loop is detected\n* Multi-state for different runtime environments\n* CPU profiling\n* Multithread Lua GC (Garbage Collection)\n\n# slua-unreal 有什么功能\n\n* 通过蓝图反射机制，自动导出unreal 4的蓝图api到lua接口\n* 支持rpc函数调用\n* 支持复写任何蓝图函数，包括rpc函数，用lua函数替代\n* 支持以lua function作为蓝图事件的回调函数\n* 支持普通c++函数和类 通过静态代码生成或者泛型代码展开导出到lua接口，同时支持与蓝图接口交互\n* 完整支持了unreal4的枚举，并导出了全部枚举值到lua\n* 支持FVector等非蓝图类，同时支持操作符重载\n* 支持扩展方法，将某些未标记为蓝图方法的函数，手动添加到蓝图类中，例如UUserWidget的GetWidgetFromName方法。\n* 支持从蓝图中调入lua，并接收lua返回值，支持任意参数类型和任意参数个数。\n* 支持蓝图out标记参数，支持c++非const引用作为out类型参数返回。\n* 自动检查脚本死循环，当代码运行超时自动报错。\n* 支持多luastate实例，用于创建不同运行环境的luastate。\n* lua代码支持cpu profile\n* lua 多线程 GC\n* 性能分析工具，支持连接真机分析\n\n![1](profiler.png)\n![2](profiler_2.png)\n\n\n\n# 调试器支持\n\n# Debugger Support\n\n我们开发了专门的vs code调试插件，支持真机调试，断点，查看变量值，代码智能提示等功能。调试器自动识别可以使用的UE UFunction蓝图函数和CppBinding导出的接口函数，不需要额外导出静态数据。\n\nWe developed a tool integrated with VsCode to support in-device debugging, breakpoint, variable inspection and code IntelliSense. Debugger will auto-generate data for UE UFunction and export C++ functions with CppBinding.\n\n![](https://user-images.githubusercontent.com/6227270/69936013-7fbde480-1511-11ea-8cb8-f1eb8d1bd9f2.gif)\n\n[调试器支持](https://github.com/Tencent/luapanda)\n[Debugger](https://github.com/Tencent/luapanda)\n\n# 使用方法简单范例\n\n## Usage at a glance\n\n```lua\n-- import blueprint class to use\nlocal Button = import('Button');\nlocal ButtonStyle = import('ButtonStyle');\nlocal TextBlock = import('TextBlock');\nlocal SluaTestCase=import('SluaTestCase');\n-- call static function of uclass\nSluaTestCase.StaticFunc()\n-- create Button\nlocal btn=Button();\nlocal txt=TextBlock();\n-- load panel of blueprint\nlocal ui=slua.loadUI('/Game/Panel.Panel');\n-- add to show\nui:AddToViewport(0);\n-- find sub widget from the panel\nlocal btn2=ui:FindWidget('Button1');\nlocal index = 1\n-- handle click event\nbtn2.OnClicked:Add(function() \n    index=index+1\n    print('say helloworld',index) \nend);\n-- handle text changed event\nlocal edit=ui:FindWidget('TextBox_0');\nlocal evt=edit.OnTextChanged:Add(function(txt) print('text changed',txt) end);\n\n-- use FVector\nlocal p = actor:K2_GetActorLocation()\nlocal h = HitResult()\nlocal v = FVector(math.sin(tt)*100,2,3)\nlocal offset = FVector(0,math.cos(tt)*50,0)\n-- support Operator\nlocal ok,h=actor:K2_SetActorLocation(v+offset,true,h,true)\n-- get referenced value\nprint(\"hit info\",h)\n```\n\n## 在蓝图中调用lua\n\n## Calling Lua functions in blueprint\n\n![](bpcall.png)\n\n```\n-- this function called by blueprint\nfunction bpcall(a,b,c,d)\n    print(\"call from bp\",a,b,c,d)\nend\n```\n\nOutput is:\n\nSlua:     call from bp    1024    Hello World 3.1400001049042 UObject: 0x136486168\n\n## 使用lua扩展Actor\n\n## Using Lua extend Actor\n\n```lua\n-- LuaActor.lua\nlocal LuaActor={}\n\n-- override event from blueprint\nfunction LuaActor:BeginPlay()\n    self.bCanEverTick = true\n    print(\"LuaActor:BeginPlay\")\nend\n\nfunction LuaActor:Tick(dt)\n    print(\"LuaActor:Tick\",self,dt)\n    -- call LuaActor function\n    local pos = self:K2_GetActorLocation()\n    -- can pass self as Actor*\n    local dist = self:GetHorizontalDistanceTo(self)\n    print(\"LuaActor pos\",pos,dist)\nend\n\nreturn Class(nil, nil, LuaActor)\n```\n\n![](luaactor.png)\n\n## Slua 2.0 特性介绍\n### Slua Override机制\n- 解决1.x版本的生命周期管理问题\n- 解决1.x self.Super:Func() 调用，在蓝图有jump指令时崩溃的问题\n- Lua模块支持类继承形式书写，例如：\n\n```lua\n-- LuaActor.lua\nlocal LuaActor ={}\n\n-- override event from blueprint\nfunction LuaActor:ReceiveBeginPlay()\n    self.bCanEverTick = true\n    -- set bCanBeDamaged property in parent\n    self.bCanBeDamaged = false\n    print(\"actor:ReceiveBeginPlay\")\nend\n\n-- override event from blueprint\nfunction LuaActor:ReceiveEndPlay(reason)\n    print(\"actor:ReceiveEndPlay\")\nend\n\nreturn Class(nil, nil, LuaActor)\n\n-- LuaBpActor.lua\nlocal LuaBpActor = {}\n\n-- override event from blueprint\nfunction LuaBpActor:ReceiveBeginPlay()\n    print(\"bpactor:ReceiveBeginPlay\")\n    -- call LuaActor super ReceiveBeginPlay\n    LuaBpActor.__super.ReceiveBeginPlay(self)\n    \n    -- call blueprint super ReceiveBeginPlay\n    self.Super:ReceiveBeginPlay()\nend\n\nlocal CLuaActor = require(\"LuaActor\")\n-- CLuaActor is base class\nreturn Class(CLuaActor, nil, LuaBpActor)\n```\n\n- 支持Lua定义RPC函数\n\n```lua\n-- LuaActor.lua\nlocal LuaActor = \n{\n    ServerRPC = {},     --C2S类RPC列表，类似UFUNCTION宏中的Server\n    ClientRPC = {},     --S2C类RPC列表，类似UFUNCTION宏中的Client\n    MulticastRPC = {},  --多播类RPC列表，类似UFUNCTION宏中的NetMulticast\n}\n\nlocal EPropertyClass = import(\"EPropertyClass\")\n\nLuaActor.ServerRPC.TestServerRPC = {\n    -- 是否可靠RPC\n    Reliable = true, \n    -- 定义参数列表\n    Params = \n    { \n        EPropertyClass.Int, \n        EPropertyClass.Str, \n        EPropertyClass.bool, \n    }\n}\n\nLuaActor.ClientRPC.TestClientRPC = {\n    -- 是否可靠RPC\n    Reliable = true, \n    -- 定义参数列表\n    Params = \n    { \n        EPropertyClass.Int, \n        EPropertyClass.Str, \n        EPropertyClass.bool, \n    }\n}\n\nLuaActor.MulticastRPC.TestMulticastRPC = {\n    -- 是否可靠RPC\n    Reliable = true, \n    -- 定义参数列表\n    Params = \n    { \n        EPropertyClass.Int, \n        EPropertyClass.Str, \n        EPropertyClass.bool, \n    }\n}\n\nfunction LuaActor:TestServerRPC(ArgInt, ArgStr, ArgBool)\n    \nend\n\nfunction LuaActor:TestClientRPC(ArgInt, ArgStr, ArgBool)\n    \nend\n\nfunction LuaActor:TestMulticastRPC(ArgInt, ArgStr, ArgBool)\n    \nend\n\n```\n\n- 支持Lua定义\"值复制\"信息，并且支持“条件值复制”、struct、数组\n\n```lua\n-- LuaActor.lua\nlocal LuaActor ={}\n\nfunction LuaActor:GetLifetimeReplicatedProps()\n    local ELifetimeCondition = import(\"ELifetimeCondition\")\n    local FVectorType = import(\"Vector\")\n    return {\n        { \"Name\", ELifetimeCondition.COND_InitialOnly, EPropertyClass.Str},\n        { \"HP\", ELifetimeCondition.COND_OwnerOnly, EPropertyClass.Float},\n        { \"Position\", ELifetimeCondition.COND_SimulatedOnly, FVectorType},\n        { \"TeamateNameList\", ELifetimeCondition.COND_None, EPropertyClass.Array, EPropertyClass.Str},\n        { \"TeamatePositions\", ELifetimeCondition.COND_None, EPropertyClass.Array, FVectorType},\n    }\nend\n\nreturn Class(nil, nil, LuaActor)\n\n```\n\n- 被Override的Cpp函数里面可以直接调用对应Lua函数\n\n```cpp\n-- MyActor.cpp\nclass MyActor : public Actor, public ILuaOverriderInterface\n{\npublic:\n    void CallDemoFunction()\n    {\n        CallLuaFunction\u003cbool\u003e(TEXT(\"IsTestEnable\"), Arg1, Arg2);\n    }\n}\n\n```\n\n```lua\n-- MyActor.lua\n\nlocal MyActor ={}\n\nfunction MyActor:IsTestEnable(Arg1, Args)\n    return true\nend\n\nreturn Class(nil, nil, MyActor)\n```\n\n\n### 机制修改\n- struct访问由拷贝改为引用，收益如下：\n\n```\n--- 以修改一个Vector类型字段为例\n\n--- 老代码\nlocal Position = Actor.Position\nPosition.X = 1\nActor.Position = Position\n\n--- 新代码\nActor.Position.X = 1\n\n```\n\n### Slua交互性能优化\n- 函数索引相比 1.x 版本有10倍速度提升\n- 属性访问、函数调用等，普遍有20%~800%的提升（大部分API速度是原来的1.5\\~3倍）。\n\n### 稳定性更加强大\n支撑PUBG Mobile 线上业务开发，稳定性得到充分验证。\n\n### 版本支持\n- UE4.18、UE4.26完整支持，支持UE5.1，其他版本因为时间精力问题暂时无法支持到位\n- 兼容lua 5.4版本接入\n\n## 性能\n\nslua-unreal提供3种技术绑定lua接口，包括：\n\n1）蓝图反射方法\n\n2）静态代码生成\n\n3）CppBinding（模板展开）\n\n其中方法2和3运行原理上没差别，只是方法2是基于libclang自动化生成代码，方法3是手写代码，所以下面的统计上仅针对1和3来对比，可以认为2和3的性能是等价的。\n\n100万次函数调用时间统计（秒），测试用例可以参考附带的TestPerf.lua文件。\n\n测试机器 MacOSX，Unreal 4.18 dev版（非release，release应该会稍微快一点），CPU i7 4GHz。\n\n### Performance\n\nunit in second, 1,000,000 calls to C++ interface from Lua, compared reflection and cppbinding, (both reflection and cppbinding are supported by slua-unreal).\n\nTest on MacOSX, Unreal 4.18 develop building, CPU i7 4GHz, test cases can be found in TestPerf.lua\n\nWithout the time spent on gc alloc, the blueprint reflection-based approach is twice as fast as the one using static code generation, while CppBinding is an order of magnitude faster than reflection.\n\n|                                                              | 蓝图反射方法(Reflection) | CppBinding方法(CppBinding) |\n| ------------------------------------------------------------ | ------------------------ | -------------------------- |\n| 空函数调用(empty function call)                              | 0.541507                 | 0.090571                   |\n| 函数返回int(function return int)                             | 0.560052                 | 0.090419                   |\n| 传入int函数返回int(function return int and pass int)         | 0.587115                 | 0.097639                   |\n| 传入Fstring函数返回int(function return FString and pass int) | 0.930042                 | 0.223207                   |\n\n与slua unity版本相比，因为unreal的蓝图反射更高效，没有gc alloc开销，基于蓝图反射的方法的性能比slua unity的静态代码生成还要快1倍，而cppbinding则快一个数量级。\n\n# 相关参考\n\nslua-unreal依赖dot-clang做c++静态代码生成的工具稍后开源，目前常用FVector等常用类的静态生成代码已经附带。\n\n[使用帮助(Document in Chinese)](https://github.com/Tencent/sluaunreal/wiki)\n\n[更完整的demo](https://github.com/IriskaDev/slua_unreal_demo)\n\n![](https://github.com/IriskaDev/slua_unreal_demo/raw/master/Documents/1551258203207.png)\n\nQQ技术支持群：15647305，需要提交具体问题issue后申请入群，谢绝hr和非技术人员进入。\n\n# 附：同品类性能对比\n系统Win10 64位\nCPU： AMD Ryzen 7 4700G with Radeon Graphics 3.60 GHZ\n\n| 10万次/秒 | Slua | UnLua | Unlua/Slua |\n| --- | --- | --- | --- |\n|TestStaticCall             \t|0.01894\t|0.02667\t|1.41 |\n|TestEmptyCall              \t|0.0183\t\t|0.03351\t|1.83 |\n|TestSetBoolCall            \t|0.02541\t|0.04206\t|1.66 |\n|TestGetBoolCall            \t|0.02134\t|0.04893\t|2.29 |\n|TestSetIntCall             \t|0.02381\t|0.04222\t|1.77 |\n|TestGetIntCall             \t|0.02085\t|0.04239\t|2.03 |\n|TestSetFloatCall           \t|0.02265\t|0.04031\t|1.78 |\n|TestGetFloatCall           \t|0.02167\t|0.03701\t|1.71 |\n|TestSetFStringCall         \t|0.04986\t|0.08801\t|1.77 |\n|TestGetFStringCall         \t|0.03032\t|0.07163\t|2.36 |\n|TestSetVectorCall          \t|0.03339\t|0.07208\t|2.16 |\n|TestGetVectorCall          \t|0.05619\t|0.0878\t\t|1.56 |\n|TestSetStructCall          \t|0.0376\t\t|0.07982\t|2.12 |\n|TestGetStructCall          \t|0.08137\t|0.08871\t|1.09 |\n|TestGetObjectCall          \t|0.03054\t|0.04709\t|1.54 |\n|TestSetIntVar              \t|0.01305\t|0.01745\t|1.34 |\n|TestGetIntVar              \t|0.01396\t|0.01553\t|1.11 |\n|TestSetStrVar              \t|0.02573\t|0.03327\t|1.29 |\n|TestGetStrVar              \t|0.01743\t|0.02555\t|1.47 |\n|TestSetBoolVar             \t|0.01362\t|0.01559\t|1.14 |\n|TestGetBoolVar             \t|0.01406\t|0.01435\t|1.02 |\n|TestSetFloatVar            \t|0.01336\t|0.01557\t|1.17 |\n|TestGetFloatVar            \t|0.01381\t|0.01585\t|1.15 |\n|TestSetVectorVar           \t|0.0194\t\t|0.01773\t|0.91 |\n|TestGetVectorVar           \t|0.01109\t|0.02358\t|2.13 |\n|TestSetStructVar           \t|0.01918\t|0.02197\t|1.15 |\n|TestGetStructVar           \t|0.01085\t|0.02408\t|2.22 |\n|TestGetObjectVar           \t|0.02111\t|0.02322\t|1.10 |\n|TestAddArrayElement        \t|0.05216\t|0.07207\t|1.38 |\n|TestGetArrayElement        \t|0.04115\t|0.08281\t|2.01 |\n|TestAddSetElement          \t|0.08038\t|0.09814\t|1.22 |\n|TestGetSetElement          \t|0.02821\t|\t        |     |\n|TestAddMapElement          \t|0.10757\t|0.16673\t|1.55 |\n|TestGetMapElement          \t|0.09039\t|0.14266\t|1.58 |\n|TestBPEmptyCall            \t|0.06335\t|0.07548\t|1.19 |\n|TestBPSetIntCall           \t|0.10759\t|0.13205\t|1.23 |\n|TestBPGetIntCall           \t|0.10575\t|0.13338\t|1.26 |\n|TestBPSetBoolCall          \t|0.10951\t|0.13201\t|1.21 |\n|TestBPGetBoolCall          \t|0.10572\t|0.13193\t|1.25 |\n|TestBPSetStringCall        \t|0.13069\t|0.18015\t|1.38 |\n|TestBPGetStringCall        \t|0.12013\t|0.15976\t|1.33 |\n|TestBPSetFloatCall         \t|0.10626\t|0.12982\t|1.22 |\n|TestBPGetFloatCall         \t|0.10486\t|0.1291\t\t|1.23 |\n|TestBPSetVectorCall        \t|0.1204\t\t|0.16478\t|1.37 |\n|TestBPGetVectorCall        \t|0.17194\t|0.18061\t|1.05 |\n|TestBPSetStructCall        \t|0.12453\t|0.17291\t|1.39 |\n|TestBPGetStructCall        \t|0.17526\t|0.18216\t|1.04 |\n|TestBPSetObjectCall        \t|0.11112\t|0.1445\t\t|1.30 |\n|TestBPGetObjectCall        \t|0.11979\t|0.14663\t|1.22 |\n|TestSetBPIntVar            \t|0.01288\t|0.01696\t|1.32 |\n|TestGetBPIntVar            \t|0.01432\t|0.01654\t|1.16 |\n|TestSetBPStrVar            \t|0.02481\t|0.03447\t|1.39 |\n|TestGetBPStrVar            \t|0.01701\t|0.02515\t|1.48 |\n|TestSetBPBoolVar           \t|0.01318\t|0.01801\t|1.37 |\n|TestGetBPBoolVar           \t|0.0131\t\t|0.0163\t\t|1.24 |\n|TestSetBPFloatVar          \t|0.01194\t|0.01646\t|1.38 |\n|TestGetBPFloatVar          \t|0.01352\t|0.01554\t|1.15 |\n|TestSetBPVectorVar         \t|0.02013\t|0.01738\t|0.86 |\n|TestGetBPVectorVar         \t|0.01127\t|0.02289\t|2.03 |\n|TestSetBPStructVar         \t|0.02006\t|0.01987\t|0.99 |\n|TestGetBPStructVar         \t|0.01154\t|0.02252\t|1.95 |\n|TestSetBPObjectVar         \t|0.018\t\t|0.01898\t|1.05 |\n|TestGetBPObjectVar         \t|0.01885\t|0.02216\t|1.18 |\n|TestAddBPArrayElement      \t|0.04994\t|0.07266\t|1.45 |\n|TestGetBPArrayElement      \t|0.04117\t|0.08902\t|2.16 |\n|TestAddBPSetElement        \t|0.07719\t|0.10107\t|1.31 |\n|TestGetBPSetElement        \t|0.08785\t|\t        |     |\n|TestAddBPMapElement        \t|0.10685\t|0.15537\t|1.45 |\n|TestGetBPMapElement        \t|0.08607\t|0.14564\t|1.69 |\n|TestOverrideSetIntVar      \t|0.01253\t|0.01691\t|1.35 |\n|TestOverrideGetIntVar      \t|0.01315\t|0.01526\t|1.16 |\n|TestOverrideSetStrVar      \t|0.02569\t|0.03261\t|1.27 |\n|TestOverrideGetStrVar      \t|0.01637\t|0.02755\t|1.68 |\n|TestOverrideSetBoolVar     \t|0.01357\t|0.01731\t|1.28 |\n|TestOverrideGetBoolVar     \t|0.01312\t|0.01598\t|1.22 |\n|TestOverrideSetFloatVar    \t|0.01298\t|0.0168\t\t|1.29 |\n|TestOverrideGetFloatVar    \t|0.01325\t|0.01613\t|1.22 |\n|TestOverrideSetVectorVar   \t|0.02141\t|0.01795\t|0.84 |\n|TestOverrideGetVectorVar   \t|0.0103\t\t|0.02297\t|2.23 |\n|TestOverrideSetStructVar   \t|0.01906\t|0.01902\t|1.00 |\n|TestOverrideGetStructVar   \t|0.01135\t|0.02313\t|2.04 |\n|TestOverrideSetObjectVar   \t|0.02002\t|0.02091\t|1.04 |\n|TestOverrideGetObjectVar   \t|0.01871\t|0.0226\t\t|1.21 |\n|TestOverrideAddArrayElement\t|0.04959\t|0.07026\t|1.42 |\n|TestOverrideGetArrayElement\t|0.04033\t|0.08686\t|2.15 |\n|TestOverrideAddSetElement  \t|0.07604\t|0.09988\t|1.31 |\n|TestOverrideGetSetElement  \t|0.08807\t|\t        |     |\n|TestOverrideAddMapElement  \t|0.1035\t\t|0.15905\t|1.54 |\n|TestOverrideGetMapElement  \t|0.08564\t|0.14475\t|1.69 |\n|TestOverrideReceiveBeginPlay\t|0.00135\t|0.03956\t|29.30|\n|TestOverrideTestFunc\t\t\t|0.01313\t|0.09633\t|7.34 |\n|TestIndexStaticCall \t\t\t|0.00125\t|0.00535\t|4.28 |\n|TestIndexEmptyCall  \t\t\t|0.00126\t|0.00559\t|4.44 |\n|TestIndexSetBoolCall\t\t\t|0.00134\t|0.0058\t\t|4.33 |\n|TestIndexGetBoolCall\t\t\t|0.00142\t|0.00572\t|4.03 |\n|TestIndexOverrideTestFunc\t\t|0.00109\t|0.00069\t|0.63 |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftencent%2Fsluaunreal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftencent%2Fsluaunreal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftencent%2Fsluaunreal/lists"}