当前位置:   article > 正文

UE使用UnLua(一)

unlua

一、概述

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是我写的一个输出语句的类

  1. local M = {}
  2. local PrintString = UE.UKismetSystemLibrary.PrintString
  3. function M.Print(text, color, duration)
  4. color = color or UE.FLinearColor(1, 0, 1)
  5. duration = duration or 500
  6. PrintString(nil, text, true, false, color, duration)
  7. end
  8. return M

 然后,我们打开关卡蓝图,按照同样的方式绑定并创建Lua模板,在关卡蓝图的Lua文件中的ReceiveBeginPlay方法中,加载我们刚刚新建的UMG

  1. function M:ReceiveBeginPlay()
  2. local Widget = UE.UWidgetBlueprintLibrary.Create(self, UE.UClass.Load("/Game/UI/UMG_Login.UMG_Login_C"))
  3. -- local WidgetClass = UE.UClass.Load("/Game/UI/UMG_Login_C")
  4. -- local Widget = NewObject(WidgetClass, self)
  5. if Widget then
  6. Widget:AddToViewport()
  7. end
  8. end

在UnLua的git仓库中提供了加载方式

 这里说一下,我查了很多文章都是使用的官方的这种路径写法,而我就是找不到文件,头都大了

 

最后将路径改成了“/Game/UI/UMG_Login.UMG_Login_C” 之后,成功的将UMG加载到了屏幕中,也是记录一下这个问题

接下来持续学习UnLua的用法

学习交流:769397359

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/332464?site
推荐阅读
相关标签
  

闽ICP备14008679号