一、概述
Unlua是个功能丰富的插件,可以在UE中进行蓝图绑定,在Lua中进行逻辑开发,使用Lua热更新的特性,可以快速开发迭代表层逻辑
二、UnLua环境
首先下载UnLua的插件包,点击下载,不会吧不会吧还有人打不开(狗头)
下载之后,将插件目录下的Plugin文件夹,拷贝到项目根目录下
PS:如果使用的是蓝图工程,需要先在工程中新建C++类,再拷贝Plugin过去,否则无法编译!!
然后打开vs进行编译
PS:我使用的是UE4.27,编译时UnLua插件出现了报错:“error C4309: “static_cast”: 截断常量值”,这里顺便附上解决方法,直接双击错误到报错的那一行,将0xEF这三个地址后面加上u
这是因为0xEF会被当成有符号int,加上u之后就被当成了无符号int,编译就没问题了
编译成功之后,打开UE编辑器即可
三、UnLua使用
新建一个控件蓝图UMG_Login
然后点击上方菜单的UnLua,选择绑定,并编译蓝图
之后打开蓝图图表,左侧Interface处,双击进入Get Module Name
在函数返回值中,添加Lua文件的名称
命名规则:要添加文件夹的话就“文件夹.”的形式,点前面都是文件夹路径,Lua文件命名使用“C++前缀_类名_C”的形式,例如“UMG_Login_C”
然后编译、保存。再点击UnLua插件,创建Lua模板
打开我们创建的Lua文件,随便写点代码输出啥的,这里的Screen是我写的一个输出语句的类
local M = {}
local PrintString = UE.UKismetSystemLibrary.PrintString
function M.Print(text, color, duration)
color = color or UE.FLinearColor(1, 0, 1)
duration = duration or 500
PrintString(nil, text, true, false, color, duration)
end
return M
然后,我们打开关卡蓝图,按照同样的方式绑定并创建Lua模板,在关卡蓝图的Lua文件中的ReceiveBeginPlay方法中,加载我们刚刚新建的UMG
function M:ReceiveBeginPlay()
local Widget = UE.UWidgetBlueprintLibrary.Create(self, UE.UClass.Load("/Game/UI/UMG_Login.UMG_Login_C"))
-- local WidgetClass = UE.UClass.Load("/Game/UI/UMG_Login_C")
-- local Widget = NewObject(WidgetClass, self)
if Widget then
Widget:AddToViewport()
end
end
在UnLua的git仓库中提供了加载方式
这里说一下,我查了很多文章都是使用的官方的这种路径写法,而我就是找不到文件,头都大了
最后将路径改成了“/Game/UI/UMG_Login.UMG_Login_C” 之后,成功的将UMG加载到了屏幕中,也是记录一下这个问题
接下来持续学习UnLua的用法
学习交流:769397359