現學現賣】IntelliJ+EmmyLua 開發調試Unity中Xlua

http://blog.csdn.net/u010019717/article/details/77510066?ref=myreadhtml

 

http://blog.csdn.NET/u010019717git

 

 

推薦一下這個國人弄的基於IntelliJ IDE 弄得插件 EmmyLua   他的QQ羣: 29850775  github

 

github: https://github.com/tangzx/IntelliJ-EmmyLuawindows

oschina: http://git.oschina.net/tangzx/IntelliJ-Lua數組

IDEA Plugins :   https://plugins.jetbrains.com/plugin/9768-emmylua網絡

文檔:     https://tangzx.github.io/emmydoc/  框架

 

 

          運行的時候可能會報錯:   Program [lua.exe] not found.  怎麼辦?  插件的不足之處沒有內置lua環境,須要本身安裝好比  Lua for window 」。  但願插件之後能內置環境。  按照做者的回覆考慮體積搞大「至少兩個平臺 32 64,再加上luasocket模塊, 還要考慮平臺和版本問題 」內置是不可能了。   傳送門:socket

方式一 Lua for Windows  的下載(跟源代碼相比會版本落後一些)編輯器

 https://github.com/rjpcomputing/luaforwindows/releaseside

並且自帶了 編輯器 SciTE 

 同時  工具幫咱們配置了環境變量(插件就是經過這個環境變量找到的lua.exe

方式二、下載 bin  文件 http://luabinaries.sourceforge.net/download.html 

解壓到安裝軟件的地方,  而後配置環境變量就行!(注意 lua.exe 是我拷貝的 lua53.exe 而後重命名的)

 

 

首先,安裝插件。  注意對IDEA 的版本有一個要求不能低於 2017.1

理論上若是你安裝過一下任意一個產品, 只要版本夠高, 均可以安裝這個插件

「IntelliJ IDEA,  PhpStorm, WebStorm , PyCharm, RubyMine,  AppCode,  CLion ,Gogland  ,DataGrip  ,Rider , Android Studio」

 

 Rider 2017.1.1 爲例(但仍是推薦使用IDEA  不然可能沒辦法建立Lua項目

        File -> Settings  而後

        你能夠把插件下載到本地, 而後選擇從磁盤安裝,   也能夠在IDEA工具內搜索安裝(我是這種)。 

          而後在右側  點擊  Install  安裝, 重啓就好了。

 

注: 可能會出現下載不了的問題 這個跟使用的網絡運營商有關。  只能使用另一種方式安裝了!!!

 

   重啓後, 新建項目  (或者  打開項目選擇Lua文件  所在的文件夾就行!)

            src 目錄下, 新建一個 main.lua 文件,  輸入 

print("Test main")

        運行, 正常輸出, 不報錯就 OK !

試試Debug 模式運行, 設置斷點 都是正常的!!

 

 

 

 

要把Unity項目導入才行:

       IDEA中  File -> New -> Module from Existing Sources  選擇Unity 項目的 Assets就行。 

 

 

怎麼調試項目中lua代碼呢

File -> Project Structure   (這個源自己是能夠添加多個的!)

 

        我遇到的問題是設置  Sources Root 的過程,  好比說我就要調試  xlua 項目的 LuaTestScript.lua.txt 腳本 

               羣中管理員的解答: root 是你代碼裏面 訪問lua文件的根目錄」,

好比 你的代碼在 src/lua/test/1.lua  裏面  你代碼裏面用的時候是  'test/1.lua' 那你的 lua目錄就是root   xlua中這種訪問是指什麼呢? 

       好比下面的LuaBehaviour.cs    luaEnv.DoString的第二個參數 

 

Try attachto pid:39556 with x64 debugger.

Found allnecessary Lua functions [M:xlua.dll, V:530]

Debuggerattached to process.

Attachfinish.

[✘]File not found : Init

[✘]File not found : LuaBehaviour

 

提示有這兩個東西沒找到!

               實例代碼中是有錯誤的, LuaBehaviour.cs 中將    luaEnv.DoString的第二個參數 改爲LuaTestScript.lua.txt能夠找到。 還差那個 Init 不知道是啥。 

Try attach to pid:39556 with x64 debugger.

Found all necessary Lua functions [M:xlua.dll, V:530]

Debugger attached to process.

Attach finish.

[✘] File not found : Init

[√] File was loaded : LuaTestScript.lua.txt

 

VS  全局搜索"Init"   ,lua是做爲cs中的字符串  就是 LuaEnv.cs  文件中!  把參數改成「LuaEnv.cs    他所在Xlua\Src 文件夾下, 要添加這個源。   結果是不行的

「若是lua代碼不是單獨的文件, 而是在cs 中的字符串 能夠斷點調試麼? 」  答案是後續可能會支持, 如今是不能夠地。    不過不影響正常調試,想要調試的lua腳本被正常加載就好了。  無論了!

 

 

 

 

 

        xlua 默認的lua文件名字是 .lua.txt 實際上就是.txt 怎麼能讓這個IDEA關聯.txt 到EmmyLua 件上?

            

 

 

代碼提示忽略大小寫:

 

 

他的代碼提示是怎麼作到的

       所謂的註解! EmmyLua註解功能只是單純的輔助編輯器代碼提示以及其它功能,和Lua代碼的實際運行邏輯沒有任何關係,由於它們就是普通的Lua註釋。

  https://tangzx.github.io/emmydoc/  文檔中提到  具體內容看文檔!

@class類聲明註解

完整格式:---@class {my_type}[ : parent_type] @comment string

@type類型標記註解

完整格式:---@type {my_type}[|other_type] @comment string

@param參數類型標記註解

完整格式:---@param {param_name} {my_type}[|other_type]@comment string

@return函數返回值註解

完整格式:---@return {my_type}[|other_type] @comment string

@field屬性註解

完整格式:---@fieldpublic|protected {my_field} {field_type}[|other_type] @comment string

數組類型

完整格式:---@typeMY_TYPE[]

字典類型

完整格式:---@typetable<KEY_TYPE, VALUE_TYPE>

函數類型

完整格式:---@typefun(param:MY_TYPE):RETURN_TYPE

 

       因此平時本身寫lua 代碼這些註解最好都添加! 做爲一種規範,也便於閱讀!

相似於這樣的示例代碼:

https://tangzx.github.io/emmydoc/annotations/example.html

 

 

註解好像能解決現有的lua API 

若是咱們要訪問Unity等相關API怎麼辦      加入qq羣, 他們有解決辦法

        qq羣:  文件 -  其它  中有  「UnityLuaAPI.zip  能夠下載   若是要看他是怎麼生成的, 能夠看視頻:

        qq羣:  文件 -  文檔   中有「IDEA+EmmyLua開發lua的教程.mp4 視頻中會介紹,生成須要 tolua 的框架在Unity中生成。   這個其實生成越多越全越好,反正也不會實際包含在項目中!

 

          下載完成後拷貝到不會被刪除的路徑下, lua安裝環境變量位置或者lua項目裏均可以。     回到 IDEA  File ->  Project Structure

       

 

            仍是回到  main.lua  腳本中: 輸入

---@type UnityEngine.GameObject

local  go

      

   這樣在使用  go 變量的時候就會看到他的代碼提示了!

 

 

還好比定義以下函數

local function test(trans)

end

 

將光標 定位到  trans   快捷鍵 「Alt + Enter」

選擇  「Create  parameter annotation  爲參數添加註解, 其中 輸入的UnityEngine.Transform 會有代碼提示。

 

---@param trans UnityEngine.Transform

local function test(trans)

end

 

這樣在函數內訪問  trans 變量就爽了!!!

 

 

 

 

 

有什麼問題加入他們的羣  討論吧!

 

=1=============================================================

其餘lua工具推薦 http://blog.csdn.net/visualcatsharp/article/details/37653107

 =2============================================================

設置sources時候,要從最上層的LuaScripts一直往下把子文件所有設置了,才能夠調試成功

而且剛開始的項目層我選的是Assets

相關文章
相關標籤/搜索