程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 在Unity3d中解析Lua腳本的方法,unity3d解析lua腳本

在Unity3d中解析Lua腳本的方法,unity3d解析lua腳本

編輯:C#入門知識

在Unity3d中解析Lua腳本的方法,unity3d解析lua腳本


由於近期項目中提出了熱更新的需求,因此本周末在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看不同公司不同用法
比較一般的用法是 服務器端的lua腳本 實現的功能邏輯一般也不復雜 甚至有的游戲裡很偏向於當作游戲配置使用
其實沒必要刻意去追求什麼環境,把那本黃皮的書拿來仔細看一看 怎麼樣執行效率會高 就很足夠了
而且你的環境搭的再好,一轉到策劃,進入游戲,就全變了,接口什麼全都不一樣了,所以唯一有用的就是處理問題的邏輯和習慣以及方法了
 

怎在lua腳本中調用另一個lua腳本中的函數??

除了樓上的回答,還可以這樣,dofile("b.lua") 然後就可以在a.lua腳本中調用b.lua中的函數了。
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved