1. 程式人生 > >XLua熱更新用法全流程總結(所有容易出問題的點)

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 提供一站式教程,閉眼式建立!

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



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

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

對於需要複製、轉載、連結和傳播部落格文章或內容的,請及時和本博主進行聯絡,留言,Email: [email protected]

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

相關推薦

XLua更新用法流程總結所有容易問題的

Xlua熱更新流程總結 本文提供全流程,中文翻譯。 Chinar 堅持將簡單的生活方式,帶給世人!(擁有更好的閱讀體驗 —— 高解析度使用者請根據需求調整網頁縮放比例) China

網站滲透思路方面總結針對新手思路介紹

針對新手寫一點滲透的小思路、小技巧,主要講的是思路,所有不會太詳細。 經常逛一些好的部落格或者門戶站,堅持下來,每天學一點思路,你會積累到很多東西,記住:技術需要時間沉澱。 (一)針對網站程式,不考慮伺服器。 一、查詢注入,注意資料庫使用者許可權和站庫是否同服。

微信Android更新Tinker使用詳解by 星空武哥

Tinker是什麼 Tinker是微信官方的Android熱補丁解決方案,它支援動態下發程式碼、So庫以及資源,讓應用能夠在不需要重新安裝的情況下實現更新。當然,你也可以使用Tinker來更新你的外掛。 它主要包括以下幾個部分: gradle編譯外掛: tinker

Unity3D更新方案網摘總結

xiang 分配 3.5 速度慢 for 小夥伴 source 為什麽 software 參考:http://blog.csdn.net/guofeng526/article/details/52662994 http://blog.csdn.net/u010019717/

Django專案跑通開發流程總結摘自我的專案:電商--天天生鮮

1.在setting裡面改配置檔案 'DIRS': [os.path.join(BASE_DIR,'templates')] 並且在與manage.py同目錄下 建立資料夾templates 2.配置 mysql 在setting裡面改配置檔案修改(具體引數根據自己實際而定):

Xlua更新筆記

成員方法:通過物件呼叫 靜態方法:通過類呼叫 static全域性的,靜態方法只能放在靜態方法中,普通方法生命週期小於靜態方法(全域性的)如協程不能在靜態方法中呼叫 ***************************環境配置與匯入******************** 匯入

將原生代碼託管到github的流程總結win和ubuntu系統同樣使用

                   !!!注意windows系統和ubuntu系統的使用方式是一樣的,都是在命令列中執行一下操作!!! 1    註冊你的gith

Android框架之Glide4.x用法總結4.8.0版本

在Android開發軟體開發中,一定會涉及到圖片的顯示,如果需要從後臺獲取資料的話那麼Glide框架最合適不過了(本人常用),目前Glide框架已更新到4.8版本,4.8.0版本是沒有jar包的,所以可以直接新增它的依賴。 1、新增依賴 dependencies{ implement

XLua----更新

一、xLua 環境配置 1).Xlua中  Plugin  Xlua複製到 需要熱更新的工程中---àAssets子目錄     2).開啟巨集HOTFIX_ENABLE File---->buildSetting---->playerSettin

Xlua更新

byte oid mage image 定義 btn 目錄 sources engine ---恢復內容開始--- 1.當配置好xlua環境後,依次點擊編輯欄的Xlua選項,如下: 2.在工程文件中找到Assets\Xlua\Resources,在此目錄下新建兩個t

XLua---更新

一.XLua環境配置 1.將XLua中  Plugin 和 XLua 複製到熱更新的工程中,注意要放在 Assets 子目錄     2.開啟巨集 HOTFIX_ENABLE File--->bulidSetting--->playerSetting---&g

作業系統最知識點總結找工作,考研必備

作為非科班出身的計算機愛好者,拜讀了作業系統書,刷了王道考研作業系統,收益頗豐,現將知識點總結如下,供找工作、考研的小夥伴們拿來作為作業系統複習提綱。 程序 記憶體 檔案 IO Xmind內容:http://pan.baidu.com/s/1i38bvzJ 密碼:b

android NDK整合opencv開發——流程總結window環境

使用opencv有兩種方式: 一種是使用opencv的java版本的API,但是這種方式不是通過本地呼叫實現的,全部都是java程式碼。 一種是使用opencv的c++版本的API,將本地c++程式碼

文字挖掘預處理的流程總結

最近半年一直忙於專案,部落格也很少更新咯。有幾個專案做了不少JS相關的工作,基本都可以利用現成的開源方案,諸如angularJs、requireJs、bootstrap、knockoutJs、TypeScript、Jquery等等;之後也有專案是無UI的,純後端

Android App更新中的外掛化ClassLoader、DexLoader1

PathClassLoader在熱更新的作用? Android ClassLoader流程解讀並簡單方式實現熱更新- https://www.jianshu.com/p/2f4939320eb1 > Android 動態升級  1.Android 外掛化 —— 指將

3D列印塑料鋼網流程介紹檔案輸出、PCB刷錫漿、PTC焊接

準備軟體 (版本不嚴格要求,操作上可能稍有不同): Altium Designer 13.0(DXP)、 SolidWorks2014、 AutoCAD、 Simplify3D(3D印表機輸出軟體) 準備材料: 錫漿(我用的維修佬的有鉛錫漿) PTC加熱器(220V、270W)

[Unity XLua]更新XLua入門(一)-基礎篇

Aladdin_XLua 前言 前段時間騰訊開源了一個內部熱更框架XLua在Unity開發群裡引起一陣熱議,也受到廣大開發者的熱捧,然後我當然也抱著好奇的心去學習學習。後面也會將擴充套件之後的工程放在git上,大家一起學習交流!在此感謝XLua作者創造出

專案kick-off meeting流程總結涉外

專案kick-off meeting流程總結(涉外) 僅供參考!如有好的建議,定將新增完善! 第一步 agenda的準備 此步驟主要涉及以下幾個部分: 1. 會議時間、與會人員、電話號碼的準備與確認。 2. agenda的內容最好採取總分的模式,層次清晰、用詞簡練。(如果內容較多可以單獨成一份文件)。 3.

oracle中case when的用法總結case when like功能

最近大量用到了oracle的sql語句中的case when,閒下來就整理一下。 1.根據類別統計 假設現在有一組資料如下 其中,0表示單選題,1表示多選題,現在分別要統計單選題跟多選

[Unity XLua]更新XLua入門(二)-俄羅斯方塊例項篇

前言 在xLua沒出來之前,開源的lua框架基本都是以介面用Lua開發為主,核心戰鬥用C#開發,但xLua出來之後主推C#開發,Lua用作HotFix,這裡我展示的第一個例子就是基於介面的經典2D小遊戲——俄羅斯方塊,介面邏輯是用C#寫,啟動載入邏輯是用lua