lua脚本怎么做成直装 lua脚本如何做成插件_Lua


前期准备工作:

第一步下载插件

https://github.com/Tencent/UnLua


lua脚本怎么做成直装 lua脚本如何做成插件_父类_02


下载的内容包了ULua的范例,可以先跳过,等看完教程再去看。

第二步,新建C++项目,命名为TestLua并且将Lua插件复制到项目中


lua脚本怎么做成直装 lua脚本如何做成插件_lua_03


lua脚本怎么做成直装 lua脚本如何做成插件_ue4 命名插件_04


重新生成项目,然后打开TestLua.sln重新编译一下

新建TestLua蓝图,点击类设置添加UnLuaInterface接口


lua脚本怎么做成直装 lua脚本如何做成插件_ue4 命名插件_05


会多出一个接口函数,这个接口函数是用来规划Lua的脚本目录


lua脚本怎么做成直装 lua脚本如何做成插件_Lua_06


Lua中类的名称必须为PrefixCPP + ClassName + [ _C ]

输入BP.TestLua_C,意思在Content/Script/目录下放置TestLua_C脚本


lua脚本怎么做成直装 lua脚本如何做成插件_Lua_07


确定无误后点击LuaTemplate按钮生成脚本


lua脚本怎么做成直装 lua脚本如何做成插件_父类_08


lua脚本怎么做成直装 lua脚本如何做成插件_父类_09


可以右键Script文件夹批量打开Lua脚本,注意,没事干别乱点,会重新覆盖脚本,巨坑!


lua脚本怎么做成直装 lua脚本如何做成插件_ue4 命名插件_10


到此为止,前期准备工作完成。

与蓝图的交互

打印Hello Word

打开TestLua_C.lua,发现常用的函数已经帮我们写好了,其中"--"表示注释


lua脚本怎么做成直装 lua脚本如何做成插件_ue4 命名插件_11


function TestLua_C:ReceiveBeginPlay()

UE4.UKismetSystemLibrary.PrintString(self,"Hello World!")

end

在ReceiveBeginPlay函数中写上打印,将TestLua蓝图拖入到场景中,点击引擎中的播放运行


lua脚本怎么做成直装 lua脚本如何做成插件_Lua_12


激动人心的Hello World出来了!

覆盖蓝图函数

新建TestPrintString函数,在BeginPlay的时候调用一下


lua脚本怎么做成直装 lua脚本如何做成插件_Lua_13


接下来就在lua脚本中重写TestPrintString函数

function TestLua_C:TestPrintString()

UE4.UKismetSystemLibrary.PrintString(self,"Hello Lua!")

end


lua脚本怎么做成直装 lua脚本如何做成插件_ue4 命名插件_14


运行


lua脚本怎么做成直装 lua脚本如何做成插件_Lua_15


如果你不希望在蓝图EventTick来调用TestPrintString,而是在的BeginPlay中调用TestPrintString,,会没有效果,因为BeginPlay被lua覆盖了,如果想要在蓝图中也能够调用,需要回调self.Overridden.ReceiveBeginPlay(self)


lua脚本怎么做成直装 lua脚本如何做成插件_lua_16


lua脚本怎么做成直装 lua脚本如何做成插件_ue4 命名插件_17


lua脚本怎么做成直装 lua脚本如何做成插件_lua脚本怎么做成直装_18


除了这个之外self.Overridden.ReceiveBeginPlay(self),你会发现一个很相似的函数:

self.Super.ReceiveBeginPlay(self),这样的函数是返回Lua父类方法,不能够返回蓝图父类的方法

需要注意的是,Lua的继承比较奇葩,首先你得在蓝图中拥有继承关系,然后需要在脚本中注明继承类

比如新建一个ParentLua,然后让TestLua在蓝图中的父类选择为ParentLua,蓝图的ParentLua不需要UnLuaInterface接口,只需要生成lua脚本后,在TestLua脚本中声明继承类名

local TestLua_C = Class("ParentLua_C")

调试

写程序难免出错,Ulua虽然没有很好的调试手段,但也留下了难能可贵的错误输出日志信息


lua脚本怎么做成直装 lua脚本如何做成插件_lua脚本怎么做成直装_19


如果不是特别精通Lua开发的同学,建议还是以蓝图为主吧,目前ULua开发还不是很友好。