【现学现卖】IntelliJ+EmmyLua 开发调试Unity中Xlua

孙广东  2017.8.23   

http://blog.csdn.NET/u010019717



推荐一下这个国人弄的基于IntelliJ IDE 弄得插件 EmmyLua   他的QQ群: 29850775  

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

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模块, 还要考虑平台和版本问题 ”内置是不可能了。   传送门:

方式一 Lua for Windows  的下载(跟源代码相比会版本落后一些)

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

而且自带了 编辑器 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 变量就爽了!!!

 

 

 

有什么问题加入他们的群  讨论吧!

 

 

 




猜你喜欢

转载自blog.csdn.net/u010019717/article/details/77510066