腾讯UnLua正式开源了! 欢迎到:https://github.com/Tencent/UnLua下关注、加星和加Fork。 UnLua是Unreal Engine 4下特性丰富且高度优化的Lua脚本插件。它遵循Unreal Engine 4的编程模式,简单易上手,UE4程序员更是可以零学习成本使用。 UnLua目前已经被应用在大量的大型项目中。 周边工具支持: UnLua能够为G6IDE(即将开放)的智能语法提示生成符号信息(包括所有引擎反射体系内以及静态导出的类、函数、枚举),并能和G6IDE配合进行Lua代码调试。
UnLua是Unreal Engine 4下特性丰富且高度优化的Lua脚本插件。它遵循Unreal Engine 4的编程模式,简单易上手,UE4程序员更是可以零学习成本使用。 UnLua目前已经被应用在大量的大型项目中。 适用场景 使用Lua编写游戏逻辑。 使用Lua替换线上系统原有的蓝图(Blueprint)逻辑。 UnLua 正式开源 Github 开源地址: https://github.com/Tencent/UnLua (点击文末阅读原文直接访问) 请给 UnLua 一个 Star ! UnLua 国内镜像地址: https://git.code.tencent.com/Tencent_Open_Source/UnLua 腾讯工蜂源码系统为开源开发者提供完整、最新的腾讯开源项目国内镜像
UnLua项目中踩过坑有那些? 答案是完全不用担心,新的方案比UnLua的快了10倍,没有错,你没有看错,是比UnLua快了10倍。 在新方案中,对比测试读写蓝图的属性(int, FString, Vector三个),读写均比UnLua快10倍以上TArray的Get, Set方法,也比UnLua快了一倍当然,其他的我还没有对比测试, 为什么新方案反射是UnLua的10倍? Unlua的流程需要执行十几个步骤,需要还有各种检查,所以慢。
很显然,UnLua并没有每次都通过反射重新读UObject上面的property,而是读取了property的缓存。 那就需要研究一下property的生命周期与UnLua是怎么管理并访问property的缓存的。访问property原理首先回顾一下UnLua是怎么访问一个UObject的property的。 讲这个的文章太多了,UnLua从1.0以来这里核心逻辑其实没什么变化。 此外,频繁创建销毁也是不合理的操作,不过从逻辑上来说UnLua还是存在漏洞。 /UnLua (github.com)我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!
base(Target) { PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; // 这里添加上插件名字,如果找不到标题中的头文件,要在这里加上"UnLua PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "WebSockets", "UnLua
UpValue结构如下: 内存占用: Lua的局部变量(Proto里的描述) 最后 在需要统计lua详细占用内存的时候,可以遍历_G上的allgc对象列表,按上面规则逐一统计,这里简单贴一个UE4+Unlua TEXT("Lua Memory Detail Info End:")); } void Initialize() { lua_State* L = UnLua
1 引言 我们的项目使用Unreal开发, 项目内内嵌了UnLua. 某天, DS发生了coredump, 堆栈顶层的几个frame, 都落在了Lua的源代码中. 结合案例, 将这部分学习成果做一个输出, 希望帮助到使用Lua, 以及UnLua的同学. lua_State*)+8>: 0x54 0x53 0x48 0x81 0xec 0xa8 0x02 0x00 并结合后续栈上的参数, 发现确实有一处代码使用了UnLua 而越界的根本原因在于, UnLua的Global_Print函数使用的luaL_tolstring接口会往栈上压一个元素.
作为对比测试的unlua,在10W次的用例就崩溃了。预计指数级增长的用例,puerts测试到1000w内存占用还不到1个G。他们严重怀疑是测试代码写错或者获取内存占用数据的方式有问题。 于是我挺好奇的去了解下这是个什么样的业务,交流下才发现用例是源自unlua,这运动员兼职裁判兼得可以。 真有卷性能的必要么?
线程,这个封装就很简单了,我也照着stat宏封装了一些方便的函数 最后,lua要使用,肯定要包装成lua的格式导出到Lua 这样,就可以在lua中愉快的使用stat了 最后,附上具体源码,我是用的UnLua
另外,随着用户群体的扩大,市面上也出现了诸如 puerts、unlua 等第三方的脚本语言方案,可以说生态上已经比较完备了。那为什么此时 Epic 还要再发明一个新的语言呢?
(比如我们客户端用Unlua并集成到Unreal Engine,服务器用官方的lua 5.4,我们这边还有项目组定制化了Lua抹除了浮点数)。
CoreUObject|Engine|SlateCore)", re.IGNORECASE ), # 忽略第三方库 re.compile(r"Projects/Plugins/UnLua