日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Lua热更新学习

發布時間:2025/3/15 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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() 尾調用不占用堆??臻g,不會棧溢出 // 函數本質與普通類型相同,可以存儲在變量或者表中 // 函數只有一個實例 閉包可以擁有多個實例 // 定義模塊不能加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");

總結

以上是生活随笔為你收集整理的Lua热更新学习的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。