XLua熱更新用法全流程總結(所有容易出問題的點)
Chinar 堅持將簡單的生活方式,帶給世人! (擁有更好的閱讀體驗 —— 高解析度使用者請根據需求調整網頁縮放比例) |
記錄 Xlua 完成熱更新流程 為新手節省寶貴的時間,避免採坑! |
Chinar 教程效果:
1
Description —— 描述
Xlua 是騰訊出品的熱更新方案
由於其開源,且熱更新方案簡單易用,便於開發者對程式碼進行維護與修改,而得到廣泛認可
這裡 Chinar
2
Xlua Import and Open Hotfix —— Xlua匯入專案並且開啟熱更新
匯入 Xlua /到專案中後,我們需要在設定面板開啟熱更新才可以完全使用
輸入命令後,一定要回車,然後等待編譯!
3
Generate and Inject Scripts —— 生成與注入指令碼檔案
當工程中 Script /指令碼檔案有變更的時候
例如增加/刪除/增加標籤[Hotfix]/增加函式標籤[LuaCallCSharp]
注意:只要有任何變動,就需要重新生成和注入指令碼
另外如果出現花式報錯時,就清除所有,並重新生成和注入
4
Custom LuaLoader —— 自定義Loader
為了測試在工程中呼叫 Lua 檔案
新建一個指令碼 ChinarHotFix ,並掛載當前場景
新建一個 Lua 檔案放在一個目錄下(因為我們自定義的Loader,是要指定該目錄中的Lua檔案的)
注意:
Lua檔案的字尾名,要與函式中的 路徑字尾 保持一致
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
指令碼中新增對應函式的釋放/刪除操作
更改後,可進行雙清、釋放的 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
類中的私有變量了
更改後,可進行雙清、釋放的 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 歡迎你的加入
本部落格為非營利性個人原創,除部分有明確署名的作品外,所刊登的所有作品的著作權均為本人所擁有,本人保留所有法定權利。違者必究
對於需要複製、轉載、連結和傳播部落格文章或內容的,請及時和本博主進行聯絡,留言,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、DexLoader)(1)
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