由於近期項目中提出了熱更新的需求,因此本周末在Lua的陪伴下度過。對Lua與Unity3d的搭配使用,僅僅達到了一個初窺門徑的程度,記錄一二於此。水平有限,歡迎批評指正。
網絡上關於Lua腳本和Unity3d的配合使用的資料不多,例子工程大多相同。大概了解到針對性的插件有uLua、UniLua、KopiLua三種。試用了前兩種,拋開效率與安全性不說,感覺uLua試用起來比較簡單,本文只介紹uLua的使用步驟。
uLua的原理是在Unity3d中解析字符串形式的Lua腳本,讓Lua與C#相互傳遞參數和方法,這樣可以以文本的形式記錄Lua腳本,游戲啟動後就能夠動態地讓一部分外部邏輯在游戲中運行起來。
如果在外部的Lua腳本中記錄了加載資源的內容,那麼就可以通過更新這個記錄有Lua腳本的文檔來加載不同的資源,實現游戲的熱更新。
(當然,Lua腳本的使用的多少,使用在哪些部分,感覺值得為每款游戲量身思考,比如擔心效率不高,可能就不適合使用在要求運行速度的部分;一旦Lua腳本中出現了報錯,他只會報在C#中解析他的地方,因此查錯的難易程度可能也是個問題)
1】下載到ulua的資源包,導入工程中,按照說明,將其中的Plugins文件夾中的內容整體復制到工程的Plugins文件夾中;
(這一步可能會出現找不到dll的錯誤,我這裡是重啟Unity解決的)
導入後工程的根目錄有以下這些東西:
2】在.txt文件中編寫一些Lua腳本,比如:
(注意:此處.txt腳本的後綴名是".txt")
3】將這個存有Lua腳本的.txt文件加載到游戲中,資源類型是"TextAsset":
方法任選,比如:
①放到Resources文件夾中,Resources.Load()來加載;
②放到工程中任意地方,使用Resoueces.LoadAtPath()來加載;
③打成AssetBundle,放到文件服務器上,使用WWW來異步加載。
(如果使用③的話,推薦一個名字叫做"HFS"的虛擬文件服務器的小工具很方便,只需點一下,即可模擬一個文件服務器出來:
,非常好用)
4】解析Lua腳本:
1 LuaState ls = new LuaState(); 2 ls.DoString(luaString); //luaString是加載進來的文檔中的字符,類型是string 3 LuaFunction lf = ls.GetFunction("luaFunc"); //luaFunc是Lua腳本中編寫的方法名 4 object[] r = lf.Call("2"); //括號中的"2"是要傳遞到Lua中的方法中的參與整型運算的值 5 return r[0].ToString(); //r[0]即是運算後返回的值,類型是object,用之前,需要轉一下類型
非常簡單,綜上,Lua與Unity3d中的C#的聯系,互相傳遞方法和參數,就OK了。你會看到,真的有外部的邏輯在正在運行的游戲中起作用了。
lua看不同公司不同用法
比較一般的用法是 服務器端的lua腳本 實現的功能邏輯一般也不復雜 甚至有的游戲裡很偏向於當作游戲配置使用
其實沒必要刻意去追求什麼環境,把那本黃皮的書拿來仔細看一看 怎麼樣執行效率會高 就很足夠了
而且你的環境搭的再好,一轉到策劃,進入游戲,就全變了,接口什麼全都不一樣了,所以唯一有用的就是處理問題的邏輯和習慣以及方法了
除了樓上的回答,還可以這樣,dofile("b.lua") 然後就可以在a.lua腳本中調用b.lua中的函數了。