Unity3d 基于xlua热更新实现系列一:登录功能熟悉lua重写C#(含源码)

前言

之前一直在学习xlua的热更新,不过看了将近一个月的,略知一二了,但仿佛未形成体系,而且看再多,也不如动手实现一下。
遂打算实现一个完整体系热更新的demo,从编码、打包、服务器、下载、热更新等过形成整体的认知。并打算将整个过程进行记录,并分享给大家。
不过这只是个demo,仅以登录界面和场景作为热更新处理,且肯定不完美,有些地方实现方法不适合的地方也欢迎大家指出交流,该demo仅供参考,谨慎用于商业项目。
同时会将遇到的坑分享出来。

样例U3DScripting

之前我们hello world了一下,详情可以查看Unity3d C# 热更新XLua插件环境配置以及入门(Hello Word) https://blog.csdn.net/qq_33789001/article/details/123045123

这里我打算以XLua\Examples\02_U3DScripting 为基础,修改一下实现登录的功能。该样例是LuaBehaviour.cs编写C#并通过injections配置unity节点传送给LuaTestScript.lua脚本,并把lua脚本中的生命周期函数和LuaBehaviour绑定,这样所有的逻辑编写都放到lua中实现。

实现过程

直接将上面的案例复制了一份重命名为登录相关的名称LoginUICtrl.cs、LoginUICtrl.lua.txt等

UI搭建

这个教简单的拖两个输入框和按钮即可:
在这里插入图片描述

并LoginUICtrl.cs脚本挂在最外层,然后配置节点:

在这里插入图片描述

改写lua脚本

这一步是比较蛋疼的,一是没有代码提示,二是lua语法和c#有差异,再者是lua要嵌套着C#。需要一段时间来适应。
改写后的代码:

local speed = 10
local lightCpnt = nil
local cubeObj = nil
function start()
	print("lua start...")
	print("injected object loginBtn:", loginBtn)
	cubeObj = CS.UnityEngine.GameObject.Find("RotateCube")
	lightCpnt = CS.UnityEngine.GameObject.Find("SunLight"):GetComponent(typeof(CS.UnityEngine.Light))
	loginBtn:GetComponent("Button").onClick:AddListener(
	function()
	    if(CS.System.String.IsNullOrEmpty(ZhangHaoIpt:GetComponent("InputField").text) or
		CS.System.String.IsNullOrEmpty(MiMaIpt:GetComponent("InputField").text))
		then
		     print("账号或密码不能为空!!")
		else
			 print(ZhangHaoIpt:GetComponent("InputField").text,"登录成功!!!")
	    end
	end
	)
end

function update()
	local r = CS.UnityEngine.Vector3.up * CS.UnityEngine.Time.deltaTime * speed
	cubeObj.transform:Rotate(r)
	lightCpnt.color = CS.UnityEngine.Color(CS.UnityEngine.Mathf.Sin(CS.UnityEngine.Time.time) / 2 + 0.5, 0, 0, 1)
end

function ondestroy()
    print("lua destroy")
end

和样例的主要差别是实现了登录点击事件绑定。

运行效果

在这里插入图片描述

源码地址

https://download.csdn.net/download/qq_33789001/84999390
打不开说明暂未通过审核

扫描二维码关注公众号,回复: 13714851 查看本文章

坑点

这个过程中遇到的坑:
1.中文乱码:
在这里插入图片描述

这是由于编码格式问题引起的。
将lua脚本用记事本打开,然后另存为编码格式UTF-8:
在这里插入图片描述

2..lua.txt
要按样例中lua脚本以TextAsset类型添加就必须是
.lua.txt文件后缀,这个是因为如果以*.lua.txt在vscode里打开是这样的不友好:

在这里插入图片描述

*.lua就可读性好很多:
在这里插入图片描述

没办法,我个人是以*.lua编写了,再加.txt后缀。。。。

3.Lua不要放StreamingAssets

各种也是尝试中发现的,如果放入文件夹下将无法识别为TextAsset。

猜你喜欢

转载自blog.csdn.net/qq_33789001/article/details/123580137
今日推荐