IntelliJ EmmyLua 开发调试Unity中Xlua

发表于2017-10-09
评论1 1.42w浏览

运行的时候可能会报错:  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安装环境变量位置或者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 变量就爽了!!!

http://blog.csdn.net/u010019717/article/details/77510066

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引