Lua热更新学习
在游戲開發中,常采用Lua進行熱更新,本文主要記錄lua學習過程中的知識點
Lua框架選擇騰訊維護的xLua進行學習
lua語法
Lua中文文檔
常用tips
// 無需結尾;分號 // nil 表示回收內存 // type() 獲取類型 // 單行注釋 -- // 多行注釋 --[[]]-- // 字符串連接 .. // 求字符串長度 #str 字節數 // tonumber() tostring() // lua沒有整數類型 // lua沒有++ -- // lua的不等于~= // lua的power()可以直接用^ // 與and 或or 非not // lua默認為全局變量 如需聲明局部寫local // 基本類型 nil boolean string number table function // 字符串定義 '' "" [[]] // lua內置關鍵字arg 代替{...} // 當可變參數含有nil時需要用select,select('#', ...) 與arg沖突 可變參數的長度 select(i, ...) 從i到末尾的所有元素判斷與循環
// 判斷語句 if() then elseif() then else end // while循環 while() do end // repeat循環 repeat until() // for循環 數值 for i = 1, 10, 2 do // 1-10 step=2 end // for循環 泛型 // ipairs()數組集合,遇到nil不再輸出 pairs()鍵值集合,可輸出nil及其后面的元素 for k, v in ipairs() do end函數定義
// 函數 無需返回,無需參數類型,支持多返回值 function funName(num1, num2) end // 匿名函數 無需函數名,但需賦值 funName = function(num1) end // return funName() 尾調用不占用堆棧空間,不會棧溢出 // 函數本質與普通類型相同,可以存儲在變量或者表中 // 函數只有一個實例 閉包可以擁有多個實例 // 定義模塊不能加local// 標記視頻 16 14 19字符串操作
string.len() string.upper() string.lower() string.find() string.sub() string.gsub() // 字符串截取 字符串替換 string.reverse() // 反轉 string.format("%d%d", num1, num2) // 格式化table
// * lua下標從1開始 // table.getn() 不可獲得鍵值集合的長度 // table.concat() 合并 // table.insert() 插入 // table.remove() 移除 // table.sort() 排序 可按ascii排字符串面向對象編程
// 聲明空表 Person = {} // 定義字段 Person.Name = "" // 定義方法 function Person.Run() end person.Run = function() end // 定義局部表引用變量,降低耦合性 local this = Person // 使用self需要改成Persion:Run()標準庫函數
math.abs() math.max() math.min() math.sin() math.cos() math.sqrt() math.randomseed() math.random() math.floor() os.data() os.time() // 自定義隨機生成 os.time() reverse sub(1, 6)內置IDE sciTE
VS環境 babelua插件
熱更方案
xLua項目地址
三種C#讀取Lua文件的方法
using XLua; public class FirstLua:MonoBehaviour {LuaEnv env = null;void Start() {env = new LuaEnv();// --------------------1. 簡單使用----------------------env = DoString("print('Hello World')"); // 使用Lua腳本env = DoString("CS.UnityEngine.Debug.Log('Hello World')"); // Lua調用C#系統類// --------------------2. 使用TextAsset方式加載----------------------TextAsset ta = Resources.Load<TextAsset>("HelloWorld.lua");env.DoString(ta.ToString());// --------------------3. 使用require加載文件----------------------// 需要保證文件位于Resource文件夾下,且以.txt后綴結尾env.DoString("require 'HelloWorld'"); // 不用加后綴// --------------------自定義文件路徑----------------------// 文件位置隨意,也不需要.txt結尾env.AddLoader(CustomMyLoader);// 修改默認路徑private byte[] CustomMyLoader(ref string fileName) {// 定義lua路徑string luaPath = Application.dataPath + '/Scripts/LuaScripts' + fileName + '.lua';// 讀取指定路徑下的文件內容,需引入using System.IOstring strLuaContent = File.ReadAllText(luaPath);// 數據類型轉換byte[] byArrayReturn = System.Text.Encoding.UTF8.GetBytes(strLuaContent);return byArrayReturn;}}void OnDestroy() {env.Dispose();} }獲取全局基本數據類型
env.Global.Get<Int>("a");總結
- 上一篇: PHP汉字转拼音的类
- 下一篇: 蓝桥杯(java)阶乘计算,输入一个正整