Unity___XLua简单运用

前段时间学习了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中,如果文章中有什么错误和问题希望大家能及时告诉我!谢谢


--------------------- 
作者:Luck1y 
来源:CSDN 
原文:https://blog.csdn.net/whitebreeze/article/details/82910479 
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/Le_Sam/article/details/84961769