现学现卖】IntelliJ+EmmyLua 开发调试Unity中Xlua
http://blog.csdn.net/u010019717/article/details/77510066?ref=myread
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 变量就爽了!!!
有什么问题加入他们的群 讨论吧!
=1=============================================================
其他lua工具推荐 http://blog.csdn.net/visualcatsharp/article/details/37653107
=2============================================================
设置sources时候,要从最上层的LuaScripts一直往下把子文件全部设置了,才可以调试成功
并且刚开始的项目层我选的是Assets

现学现卖】IntelliJ+EmmyLua 开发调试Unity中Xlua的更多相关文章
- 关于火狐浏览器在开发调试过程中,出现javascript:void(0)的状态
关于火狐浏览器在开发调试过程中,出现javascript:void(0)的状态 由于火狐浏览器没有安装 Adobe Flash Player 19 NPAPI这个插件 安装好了之后就可以直接运行了
- 现学现卖——Keil uVision 使用教程
Keil uVision 使用教程 1.如果有旧的工程在,先关闭旧工程.Project -> Close Project2.新建工程.Project -> New uVision Proj ...
- 现学现卖——VS2013 C#测试
VS2013 C#测试 首先安装Unit Test Generator.方法为:工具->扩展和更新->联机->搜索“Unit Test Generator”,图标为装有蓝色液体的小试 ...
- 程序猿的日常——Mybatis现学现卖
最近有一个小项目需求,需要用spring mvc + mybatis实现一个复杂的配置系统.其中遇到了很多不太常见的问题,在这里特意记录下: 主要涉及的内容有 事务 多表删除 插入并返回主键 1 sp ...
- 【现学现卖】th:href标签动态路径设置,thymeleaf获取session中的属性值
update:2020-02-28:按道理来说这个功能在前后端分离的时候应该不怎么用的上,基本到现在我还是没遇到过有这样的需求,不过也是一种方法就是.th:href="@{/{role}/l ...
- 【现学现卖】python小爬虫
1.给小表弟汇总一个院校列表,想来想去可以写一个小爬虫爬下来方便些,所以就看了看怎么用python写,到了基本能用的程度,没有什么特别的技巧,大多都是百度搜的,遇事不决问百度啦 2.基本流程就是: 用 ...
- java高并发系列 - 第27天:实战篇,接口性能成倍提升,让同事刮目相看,现学现用
这是java高并发系列第27篇文章. 开发环境:jdk1.8. 案例讲解 电商app都有用过吧,商品详情页,需要给他们提供一个接口获取商品相关信息: 商品基本信息(名称.价格.库存.会员价格等) 商品 ...
- 『现学现忘』Git对象 — 16、Tree对象详解
目录 1.Tree对象介绍 2.Tree对象说明 (1)初始化一个新的本地版本库 (2)创建一个树对象(重点) (3)创建第二个文件(重点) (4)将第一个树对象加入暂存区,使其成为新的树对 3.总结 ...
- Django学习笔记(现学现写,实时更新)
说明:我是先上手做一些简单的例子,然后在尝试的过程中理解Django的原理,笔记也是按这个思路来的. 一.Django结构与基本文件介绍 1. django-admin.py 工程管理工具,主要用于创 ...
随机推荐
- window中启动vs后鼠标无法移动
你停止wisptis.exe这个进程,在c:\Windows\System32下删除wispitis.exe就可以了!
- Qt中QBitmap 的使用 --QBitmap的作用
特别注意:如果想把做一个先把图画在内存中,在显示到页面,不要使用bitmap,这个只有单色: 一般情况下QBitmap只作为图片掩码使用,比如做不规则窗口. QBitmap表示一种只有黑白的单色图片, ...
- 【大数据之数据仓库】GreenPlum优化器对比测试
在< [大数据之数据仓库]选型流水记>一文中有提及,当时没有测试GreenPlum的quicklz压缩算法和ORCA查询优化器,考虑到quicklz压缩算法因为版权问题不会开源(详情请参阅 ...
- React基础篇(2) -- state&props&refs
内容简介 state props refs 行内样式及动态类名 state 基本介绍 React 把组件看成是一个状态机(State Machines).通过与用户的交互,实现不同状态,然后渲染 UI ...
- [Swift]八大排序算法(四):堆排序
排序分为内部排序和外部排序. 内部排序:是指待排序列完全存放在内存中所进行的排序过程,适合不太大的元素序列. 外部排序:指的是大文件的排序,即待排序的记录存储在外存储器上,待排序的文件无法一次装入内存 ...
- redis集群如何解决重启不了的问题
redis使用集群部署,如果遇到断电或者服务器重启,当再次启动的时候,有时候会启动不了.需要使用trib的fix命令进行修复.如果修复还是不行的话,可以清除节点数据再重新建集群,前提要备份之后操作. ...
- Qt 学习之路 2(66):访问网络(2)
Home / Qt 学习之路 2 / Qt 学习之路 2(66):访问网络(2) Qt 学习之路 2(66):访问网络(2) 豆子 2013年10月31日 Qt 学习之路 2 27条评论 上一 ...
- python get() 和getattr()
get() Python 字典 get() 函数返回指定键的值,如果值不在字典中返回默认值. 语法: dict.get(key, default=None) 实例1: d={'A':1,'b':2} ...
- P1613 跑路
Luogu1613 #include<bits/stdc++.h> using namespace std; const int N=65; bool G[N][N][N]; int di ...
- 洛谷 P1800 software_NOI导刊2010提高(06)
题目链接 题解 二分答案+dp 如果我们知道答案,贪心地想,让每个人做尽量多的模块一定不会比最优解差 \(f[i][j]\)表示前\(i\)个人第一个模块做了\(j\)块,第二个模块最多能做多少 然后 ...