|
前段时间学习了XLua的教程,发现非常的好用,下面用一个简单的例子来使用一下Xlua,将一个加法运算的程序 热更新成减法运算
首先,我们写一个简单的加法运算
using System;using System.Collections;using System.Collections.Generic;using System.Text;using UnityEngine;using UnityEngine.UI;using XLua;public class XluaText : MonoBehaviour { public Text EditionText;//显示版本 public Text Operator;//运算符 public Text Anser;//结果 public InputField input1;//第一个数据 public InputField input2;//第二个数据 private void Start() { Init(); } public void Init() { Debug.LogError("第一个版本初始化"); } public void Add() { int num = int.Parse(input1.text) + int.Parse(input2.text); Anser.text = "= " + num.ToString(); }}然后在Unity编辑器中给相应的UI赋值,将脚本绑定在Canvas画布上,并将画布名改名为GamePanel,效果如下图:
运行后也很简单:
好了 ,我们现在开始进行热更的步骤 :
一丶先在Scripting Dfeine Symbols中加入HOTFIX_ENABLE标签
选择Edit->Project Setting->Player 右边Inspector列表中
加入HOTFIX_ENABLE标签
二丶在要修改的类前加上[Hotfix]
[Hotfix]public class XluaText : MonoBehaviour 三丶开始编写Lua脚本
xlua.hotfix(CS.XluaText,'Init',function(self) self.EditionText.text = '版本2' self.Operator.text = '-' end)xlua.hotfix(CS.XluaText,'Add',function(self) local num = tonumber(self.input1.text) - tonumber(self.input2.text) self.Anser.text = "= "..tostring(num); end)hofix函数的3个参数分别为:需要修改的类,修改的函数名,函数类。
该lua脚本实现的功能是修改Init函数,把EditionText修改成“版本2”,把Operator的Text修改成“-”号
再修改Add脚本 将加法运算修改成减法运算。
保存该lua脚本名为XluaText1.lua。
四丶编写调用Lua脚本的类
using System.Collections;using System.Collections.Generic;using System.Text;using UnityEngine;using XLua;public class HotFixText : MonoBehaviour{ LuaEnv m_kLuaEnv; public GameObject gamepanel; public GameObject Downpanel; void Start () { //代码热更步骤 m_kLuaEnv = new LuaEnv(); //该变量最好保证全局就此一个 //查找指定路径下lua热更文件 string path = Application.persistentDataPath + "/XluaText1.lua.txt"; //用协程序下载读取文件内容 StartCoroutine(DownloadFile(path)); } public IEnumerator DownloadFile(string path) { WWW www = new WWW(path); yield return www; if (www.isDone) { System.IO.StreamReader sr = new System.IO.StreamReader(path, Encoding.UTF8); if (sr != null) { //执行该Lua脚本中的语句 m_kLuaEnv.DoString(sr.ReadToEnd()); } } gamepanel.SetActive(true); Downpanel.SetActive(false); }}如果读取路径下有XluaText1.lua文件时 则执行lua脚本中的内容,没有则正常运行。
这里将2个gameobject的进行了激活和非激活设置,是简单为了体现出更新的效果。如图所示:
GamePanel就是之前做好的计算加法的画布,先设置为false,新添加的DownPanel画布就是一个背景和一个Text而已
将HotFixText 脚本绑定在摄像机上并将2个gameobject赋值
注:要先将该脚本的Enable设置成False,当执行完下载文件的脚本后用动态激活
五丶编写从网络上下载文件的类,已达到热更的效果
using System.Collections;using System.Collections.Generic;using System.IO;using UnityEngine;using UnityEngine.UI;public class WWWText : MonoBehaviour { string urlPath = "ftp://192.168.1.173/XluaText1.lua.txt"; //资源网络路径(根据自己的服务器来写) string file_SaveUrl;//资源保路径 FileInfo file; void Start() { file_SaveUrl = Application.persistentDataPath + "/XluaText1.lua.txt"; file = new FileInfo(file_SaveUrl); StartCoroutine(DownFile(urlPath)); } /// <summary> /// 下载文件到对应的地址 /// </summary> IEnumerator DownFile(string url) { WWW www = new WWW(url); yield return www; if (www.isDone) { Debug.Log("下载完成"); byte[] bytes = www.bytes; CreatFile(bytes); //下载完成并创建脚本后调用热更新脚本 this.GetComponent<HotFixText>().enabled = true; } } /// <summary> /// 创建文件 /// </summary> /// <param name="bytes"></param> void CreatFile(byte[] bytes) { Stream stream; stream = file.Create(); stream.Write(bytes, 0, bytes.Length); stream.Close(); stream.Dispose(); }}将服务器中上传的lua文件 下载到Application.persistentDataPath中,在激活HotFixText脚本进行读取,实现热更新
该脚本也绑定到摄像机上,为了动态开启HotFixText脚本。
注:这里的网络路径可以自己将电脑做成一个简单的服务器,我这里就是把E盘做成了服务器,然后将XluaText1.lua放进了E盘的根目录下。关于把电脑做成服务器的方法可以查阅此网页
https://jingyan.baidu.com/article/af9f5a2d79f49a43150a4540.html
六丶编辑器中测试和打包注意
在Unity编辑器中测试时,要先选择工具栏中的XLua——>Generate Code,然后XLua——>Hotfix Inject In Editor 就可以进行测试了
先正常运行一遍
跟之前一样,由于路径中没有找到对应的lua脚本 所以没有进行下载和热更
Init也是打印了函数中对应的Debug,运算也还是加法
现在,我向我之前设置的服务器地址上传XluaText1.lua脚本。
之前我是将F盘的这个文件夹设置成了服务器的地址 所以直接将lua脚本拖进来就可以了。
再次运行
经常一段时间的Download,下载完成后,画布切换实现了热更,版本1变成了版本2,。
之前的Init初始化打印也没了,输入2个数字进行计算 也变成了Lua脚本中对应的减法运算
一个简单的Xlua项目就完成了!我现在也刚开始初学Xlua中,如果文章中有什么错误和问题希望大家能及时告诉我!谢谢 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|