XLua熱更新用法全流程總結(所有容易出問題的點)


Xlua熱更新流程總結


本文提供全流程,中文翻譯。

Chinar 堅持將簡單的生活方式,帶給世人!

(擁有更好的閱讀體驗 —— 高分辨率用戶請根據需求調整網頁縮放比例)


Chinar —— 心分享、心創新!

記錄 Xlua 完成熱更新流程

為新手節省寶貴的時間,避免采坑!


Chinar 教程效果:



全文高清圖片,點擊即可放大觀看 (很多人竟然不知道)


1

Description —— 描述


Xlua 是騰訊出品的熱更新方案

由於其開源,且熱更新方案簡單易用,便於開發者對代碼進行維護與修改,而得到廣泛認可

這里 Chinar Xlua 實現熱更新的流程與坑進行一些記錄與說明
舉個栗子黑白88


2

Xlua Import and Open Hotfix —— Xlua導入項目並且開啟熱更新


導入 Xlua /到項目中后,我們需要在設置面板開啟熱更新才可以完全使用

輸入命令后,一定要回車,然后等待編譯!
舉個栗子黑白88
這里寫圖片描述


3

Generate and Inject Scripts —— 生成與注入腳本文件


當工程中 Script /腳本文件有變更的時候

例如增加/刪除/增加標簽[Hotfix]/增加函數標簽[LuaCallCSharp]

注意:只要有任何變動,就需要重新生成和注入腳本

另外如果出現花式報錯時,就清除所有,並重新生成和注入

舉個栗子黑白88
這里寫圖片描述


4

Custom LuaLoader —— 自定義Loader


為了測試在工程中調用 Lua 文件

新建一個腳本 ChinarHotFix ,並掛載當前場景

新建一個 Lua 文件放在一個目錄下(因為我們自定義的Loader,是要指定該目錄中的Lua文件的)

注意:

Lua文件的后綴名,要與函數中的 路徑后綴 保持一致

舉個栗子黑白88

C# 文件:

using System.IO;
using System.Text;
using UnityEngine;
using XLua;


/// <summary>
/// 熱更新測試腳本——該腳本新建一個 Lua環境,並完成對 Lua腳本的指向調用
/// </summary>
public class ChinarHotFix : MonoBehaviour
{
    private LuaEnv luaEnv; //聲明一個Lua環境對象


    void Start()
    {
        luaEnv = new LuaEnv();                     //實例化一個
        luaEnv.AddLoader(ChinarLoader);            //添加Loader
        luaEnv.DoString("require'ChinarLuaTest'"); //引用名為: ChinarLuaTest 的 Lua 腳本
    }


    /// <summary>
    /// 自定義一個 Loader 
    /// </summary>
    /// <param name="luaFileName">Lua文件名</param>
    /// <returns>字節組</returns>
    private byte[] ChinarLoader(ref string luaFileName)
    {
        return Encoding.UTF8.GetBytes(File.ReadAllText(@"C:\Users\Administrator\Desktop\ChinarXLuaDemo\LuaFiles\" + luaFileName + ".lua")); //讀指定目錄下的 Lua 文件,並返回字節組
    }
}

Lua 文件:

print('Chinar')

5

Before the LuaEnv.Dispose —— 釋放Lua環境之前


運行后需要對 LuaEnv 環境進行釋放

釋放 LuaEnv 之前還要反注冊,那些注冊到C#中的回調函數

不然就會造成 LuaEnv 已經釋放了,但是 Xlua 機制中的 Delegate 中的函數回調並沒有被釋放


直接新建一個 Lua 腳本,專門管理並釋放 Delegate 中的函數的釋放

例如:你通過Lua腳本 xlua.hotfix(CS.ChinarTest,'ChinarTestMethod',function) 注冊到 C# 中的函數

則通過新建一個 Lua 腳本ChinarDispose.lua,寫上 xlua.hotfix(CS.ChinarTest,'ChinarTestMethod',nil) 質空,即可完成釋放

注意:每通過Lua腳本修改一個C#函數,都需要在ChinarDispose.lua腳本中添加對應函數的釋放/刪除操作
舉個栗子黑白88

更改后,可進行雙清、釋放的 C# 文件:

using System.IO;
using System.Text;
using UnityEngine;
using XLua;


/// <summary>
/// 熱更新測試腳本——該腳本新建一個 Lua環境,並完成對 Lua腳本的指向調用
/// </summary>
public class ChinarHotFix : MonoBehaviour
{
    private LuaEnv luaEnv; //聲明一個Lua環境對象


    void Start()
    {
        luaEnv = new LuaEnv();                     //實例化一個
        luaEnv.AddLoader(ChinarLoader);            //添加Loader
        luaEnv.DoString("require'ChinarLuaTest'"); //引用名為: ChinarLuaTest 的 Lua 腳本
    }


    /// <summary>
    /// 自定義一個 Loader 
    /// </summary>
    /// <param name="luaFileName">Lua文件名</param>
    /// <returns>字節組</returns>
    private byte[] ChinarLoader(ref string luaFileName)
    {
        return Encoding.UTF8.GetBytes(File.ReadAllText(@"C:\Users\Administrator\Desktop\XluaProjects\LuaFiles\" + luaFileName + ".lua")); //讀指定目錄下的 Lua 文件,並返回字節組
    }

    /// <summary>
    /// 釋放掉函數
    /// 此函數會在 OnDestroy 之前調用
    /// </summary>
    private void OnDisable()
    {
        luaEnv.DoString("require'ChinarDispose'");
    }

    /// <summary>
    /// 釋放資源
    /// 此函數會在最后調用,物體被刪除時
    /// </summary>
    private void OnDestroy()
    {
        luaEnv.Dispose();
    }


}

ChinarDispose.lua文件:

xlua.hotfix(CS.ChinarTest,'ChinarTestMethod',nil)
--xlua.hotfix(CS.ChinarTest1,'ChinarTestMethod1',nil)只要有修改C#中對應函數,都需要在這里完成釋放操作 --xlua.hotfix(CS.ChinarTest2,'ChinarTestMethod2',nil) --xlua.hotfix(CS.ChinarTest3,'ChinarTestMethod3',nil)

6

private Variable —— 私有變量


正常情況,我們是無法直接通過 Lua 直接訪問到 C# 中的私有變量的

然而 Xlua 機制為我們提供了一個非常簡便的解決方案

當我們需要訪問某個 C# 類中的私有變量時,只需要在 Lua 代碼中加上一句話

xlua.private_accessible(CS.ChinarTest)

然后,我們就可以訪問到 C# ChinarTest類中的私有變量了
舉個栗子黑白88

更改后,可進行雙清、釋放的 C# 文件:

using UnityEngine;
using XLua;

[Hotfix]
public class ChinarTest: MonoBehaviour
{
    private int Number = 666;//私有數字變量--例如這么一個私有變量
}

lua文件中加上:

xlua.private_accessible(CS.ChinarTest)--只有加上這句話,才可以訪問C#對應類中的私有變量

支持

May Be —— 搞開發,總有一天要做的事!


擁有自己的服務器,無需再找攻略!

Chinar 提供一站式教程,閉眼式創建!

為新手節省寶貴時間,避免采坑!


先點擊領取 —— 阿里全產品優惠券 (享受最低優惠)


1 —— 雲服務器超全購買流程 (新手必備!)

2 —— 阿里ECS雲服務器自定義配置 - 購買教程(新手必備!)

3—— Windows 服務器配置、運行、建站一條龍 !

4 —— Linux 服務器配置、運行、建站一條龍 !





技術交流群:806091680 ! Chinar 歡迎你的加入


END

本博客為非營利性個人原創,除部分有明確署名的作品外,所刊登的所有作品的著作權均為本人所擁有,本人保留所有法定權利。違者必究

對於需要復制、轉載、鏈接和傳播博客文章或內容的,請及時和本博主進行聯系,留言,Email: ichinar@icloud.com

對於經本博主明確授權和許可使用文章及內容的,使用時請注明文章或內容出處並注明網址


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM