想用lua写逻辑?来看看这个插件

实在是太喜欢lua这个语言了,想在哪里都用它,所以我写了一个插件,让lua能够控制虚幻引擎,项目在这https://github.com/asqbtcupid/unreal.lua

这个插件实现的事情很简单,它没有让lua成为一个component这样的角色,只是让c++把控制权转交给了lua。

1.c++可以调用lua的全局方法,并传递参数,在lua里能正确识别出参数的值和类型

2.lua里能调用UFUNCTION,能读写UPROPERTY。

这个项目里有几个分支,其实是demo,大家可以试试demo_firstperson_umg这个分支,搭建起来十分钟吧。

不过如果是二进制版的引擎,不能编译这个插件,我也不知道为什么,源码版没问题

还有更多特性,有时间我再一一说明

很赞,这样能够使得版本热更新更加友好……

很不错的想法,谢谢分享。

更新一下:主干现在支持IOS和Android平台了

launcher表示编译不过。 lua generator报错。
这个不能像unreal.js一样用么

launcher编译的确有问题,目前有两个办法解决
1.建一个c++空项目,把Plugins/LuaPlugin这个插件放到这个项目里,然后编辑打开这个项目,然后到设置的插件页面,找到这个插件,手动package到一个文件夹里,以后就用这个package出来的插件
还有一个办法是一个国外的网友提供的,我没有测试过:
在 CatchMe.uproject 加入这个代码,好像就能自动编译了

“PreBuildSteps”:
{
“Win64”:

    "\"$(EngineDir)/Build/BatchFiles/Build.bat\" UnrealHeaderTool Win64 Development -module LuaBindingGenerator -plugin \"$(ProjectDir)/Plugins/LuaIntegration/LuaIntegration.uplugin\" -NoMutex"
]

}
因为我自己用的是源码引擎,不好意思一直没空搞这个问题

想法不错,但是你这样做,是不推荐的。因为Blueprint本身就是一种资源类型的脚本语言。你的lua component里做的任何功能,BP都可以做。使用lua带来的好处,比如热更新,BP都可以支持。而且你这样做还不能WYSWYG的对具有外形的东西进行设计。只能用来写逻辑。但逻辑上效率又比不过C++, 真是连鸡肋都不如了…

想法不错,但你这样做,是不推荐的,蓝图的虚拟机是c++写的,BP能做的,c++也能做,而且逻辑又比不过c++,真是鸡肋都不如了。想法不错,但你这么说,是不推荐的,因为c++也是一种静态编译语言,其编译器还可以用c写的,c++能做的,c也能做,但逻辑效率又比不上c,c++真是连鸡肋都不如了。想法不错,但你这样做是不推荐的…,来点有意思的行么,楼上?

额。这还不够有意思吗?我没有反对过你的爱好。我过去lua也用过好多年。我只是觉得在ue4里没有使用Lua的必要。不想对其他学习ue4的人产生误导。特别是从unity转过来的。因为unity里确实有用lua的必要。

语言就是个工具,有必要这么在意?爱用用,不用出门左转。

asqbtcupid不要被他干擾。lua的價值在於游戲發佈后熱更做mod。你不可能讓玩家寫藍圖。
老外那個方法我試了不行。不知道是不是版本問題。
新建項目的話打開之前都要編譯plugin啊 還是過不了。
你那個lua文件夾裏面的lua子工程是怎麽配的?

你如果是在win64或者mac64平台工作的话,不用自己配置lua子工程,因为我已经生成好了lua的静态库,在目录Lua/Lib/能看到。现在在launcher的一个问题就是,Plugins/LuaPlugin这个插件没法在项目启动时编译出dll,我知道你说的就是这个问题。所以我的办法就是把这个插件放到一个空项目里,然后不用启用这个插件,修改Plugins/LuaPlugin/LuaPlugin.uplugin里的一行"EnabledByDefault" : true,改成"EnabledByDefault" : false,我漏说了这个,所以项目启动时候还是要去链接这个插件,现在改成了false就不会了,然后等你的空项目打开了编辑器,在去插件页面里找到这个插件,并且package到一个文件夹里,跟原本的LuaPlugin相比,你能看到会多了Binaries和Intermediate这两个文件夹,这两个文件夹就是我们需要的东西,把这个两个文件夹拷贝回你原始的项目的LuaPlugin目录里,在项目启动的时候,就能找到dll不会报错了。其实我也不知道这个是引擎的问题还是可以通过什么设置规避。在源码引擎里就不会有这个问题了。

给楼主个赞! 顺便问下1 : git上的demo分支怎么都没看到 ? 2:我在mac上编译 说 Lualoadgame文件出错,发现是大小写问题(还有几个头文件也是)可是文件改了,编译时依旧回去了?这是什么鬼? 请楼主赐教!

现在只剩两个分支了,一个是4.16,一个master主干,4.16这个分支不维护了,主干是给4.17用的,这两个都是一样的demo,简单示范了怎么用这个插件。你编译出错用的引擎是哪个版本,并且用的lua插件是哪个版本?你说的编译的时候被改回去的有三个文件,分别是DelegateLuaProxy.h,Lualoadgame.cpp,Luaload.cpp,这三是自动生成的不要手改,如果你发现有编译出错在DelegateLuaProxy.h,是因为DelegateLuaProxy.h和DelegateLuaProxy.generated.h没有对应上,但UHT也不会重新生成。解决办法很简单,你随便找个别的头文件,比如CatchmeCharacter.h加个空行,再重新编译,这时UHT会给DelegateLuaProxy.h生成最新的DelegateLuaProxy.generated.h,编译就没毛病了。

楼主做了个非常好的事情,我也是感觉lua方便许多,当然蓝图也不错,但是调试方面和开发效率来说还是lua会更方便更高效吧。等等稍后适当的时候把楼主的工程应用到我们的项目,谢谢!加油!

谢谢支持,蓝图还是很强大,带智能提示并且有编译检查类型错误,但是纯逻辑用蓝图写维护起来和扩展起来都太痛苦,lua可以稍微补充一下。

现在这个插件 实用性到什么程度了呢 ,蓝图确实不易维护

请问支持4.20.1版本 吗?