【xLua】xLua热更新简单实现

前言:

Unity 2017.3.0p1

xLua v2.1.9

一.导入xLua

新建项目,将xLua的Assets下的四个文件文件拷贝到项目中的Assets

还需将xLua的Asset同级目录下的Tools也拷贝到项目中

二.配置

在File--Build Settings--Player Settings--Other Settings--Configuration的Scripting Define Symbols添加HOTFIX_ENABLE

三.用NetBox开启一个服务器

NetBox可以快速地开启一个服务器,放在哪个目录则在哪里开启服务器

链接:https://pan.baidu.com/s/1hOVXoB2oZJ3VbPaS_lWHbw 
提取码:kjc6 

现在将Lua脚本和NetBox都放在F盘根目录

 

开启的服务器地址默认是localhost,但如果默认端口无法访问,则可以查看本地端口

现在服务器地址就是http://localhost:59311/

四.新建场景和脚本

Loading场景用于加载资源,LoadResources脚本挂在Loading场景的一个空物体上

Main场景是主场景,Mian脚本挂在Mian场景的一个空物体上
Mian场景在放置一个Text控件,用于显示版本号

LoadResources脚本

using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using UnityEngine.Networking;

public class LoadResources : MonoBehaviour {

    //服务器资源地址
    string url = @"http://localhost:59311//HotfixTest.lua.txt";
    //下载地址
    string path;


    void Start () {
        path = Application.persistentDataPath + "/HotfixTest.lua.txt";

        StartCoroutine(Load());
    }
    
    IEnumerator Load()
    {
        UnityWebRequest request = UnityWebRequest.Get(url);
        yield return request.SendWebRequest();

        //如果服务器有相应的资源,则能下载成功
        if (!request.isHttpError)
        {
            string str = request.downloadHandler.text;
            File.WriteAllText(path, str);

            print("下载完成");
        }
        else
        {
            print("跳过更新");
        }

        //跳转到Main场景
        UnityEngine.SceneManagement.SceneManager.LoadScene("Main");
    }

}

Main脚本

需要在类前加上Hotfix

using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using UnityEngine.UI;
using XLua;

[Hotfix]
public class Main : MonoBehaviour {

    public Text versionText;

    LuaEnv luaEnv;
    //本地资源地址
    string path;

    void Start()
    {
        path = Application.persistentDataPath + "/HotfixTest.lua.txt";

        luaEnv = new LuaEnv();
        luaEnv.AddLoader(myLoader);

        if (File.Exists(path))
            luaEnv.DoString("require 'HotfixTest'");

        ShowVersion();
    }


    //加载本地文件
    private byte[] myLoader(ref string filePath)
    {
        return System.Text.Encoding.UTF8.GetBytes(File.ReadAllText(path));
    }

    private void ShowVersion()
    {
     
    }

    private void OnDestroy()
    {
        luaEnv.Dispose();
    }
}

HotfixTest.lua.txt

xlua.hotfix(CS.Main,'ShowVersion',function(self)
	self.versionText.text='V2.0.0'
end)

五.运行

在Unity中点击XLua--Generate Code

出现finished!

在点击XLua--Hotfix Inject In Editor

出现had injected! hotfix inject finish!

则表示成功了

现在如果服务器不放lua脚本,控制台上输出跳过更新,text显示不变

现在如果服务器放上lua脚本,控制台上输出下载完成,text显示V2.0.0

 

现在如果又想更新资源,更新lua脚本

xlua.hotfix(CS.Main,'ShowVersion',function(self)
	self.versionText.text='V3.0.0'
end)

重新运行

热更新完成

 


xLua官网

官方FAQ

 

 

相关推荐
©️2020 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页