文章目录
- vscode调试Unity
- C#
- 环境需求
- 开始调试
- Lua
- 添加Debugger
- 环境配置
- 联系.txt文件
- 配置Java环境
- 添加调试代码
- 断点不生效的问题
vscode调试Unity
C#
现在使用vscode调试Unity的C#代码很简单,直接在vscode的EXTENSIONS里面搜索“Unity”,第一个就是,然后安装它,它会自动帮你安装上C#
和C# Dev Kit
扩展,这两个扩展的作用是代码导航和编译。
环境需求
- Unity 2019 LTS或更高的版本
- 需要在vscode中激活
C# Dev Kit
扩展,安装后就是激活的 - .NET 7 SDK或更高的版本,
C# Dev Kit
会自动帮你安装 - Unity的Visual Studio Editor包需要2.0.20或更高版本
Visual Studio Code Editor
是舍弃的包,不用管。如果Visual Studio Editor
的版本小于2.0.20,可以先解锁再升级到最新的版本,下图是解锁过。
.Net Core SDK的版本检测,打开cmd,输入dotnet --list-sdks
就可以查看本机上安装的sdk的版本。
开始调试
Unity扩展添加了两个命令到vscode的命令面板(Ctrl+Shift+P打开)
-
Attach Unity Debugger
:这个命令会显示可以附加到Unity debugger的Unity Editor和Player -
Unity API Reference
: 这个命令会打开你选中的代码的Unity文档。
注意:如果你第一次运行,没有使用Attach Unity Debugger
命令选择Unity Editor和Player,直接在Run And Debug那里点击开始,会弹出出dotnot is not yet acquired
,无法成功附加,原因应该是你没有选择附加的Unity对象。执行Attach Unity Debugger
选择Unity Editor和Player之后就正常了。
Lua
Lua的调试是使用的EmmyLua
扩展。为了方便Lua的编写,以及添加断点,需要安装Lua
扩展。
添加Debugger
打开.vscode/launch.json文件,右下角有一个Add Configuration...
按钮,点击,在弹出的列表中查找,可以看到EmmyLua New Debug
,EmmyLua: Attach by process id
,EmmyLua: Attach by launch program
三个选项,这里我选的是EmmyLua New Debug
。
可以看到emmylua支持的文件扩展名也有.lua.txt
。ideConnectDebugger
默认是true,这里我将它改成了false。如果是true的话,需要先运行Unity,再在vscode开始调试;false则相反。ideConnectDebugger
从字面意思理解就是ide连接到debugger,ide是vscode,debugger是Unity。再结合上面的host
和port
字段,可以猜出emmylua和unity的连接是使用网络协议连接的,所以ide和debugger必定一个为服务单,一个为客户端。
添加debugger之后,我们可以在调试那里变成了两个选项:
Attach to Unity
是用来调试C#的;EmmyLua New Debug
是用来调试Lua的;你想调试哪个就使用哪个Debugger,不能同时调试C#和Lua。
环境配置
联系.txt文件
由于Unity不支持.lua
文件,所以lua脚本一般使用.txt
文件。但是vscode的lua又无法识别.txt
文件,所以必须将lua和.txt
文件联系起来。又为了和其他.txt
文件区分,文件后缀可以改成.lua.txt
。上面的launch.json里面EmmyLua也支持.lua.txt
的文件后缀。打开.vscode/settings.json
文件,在其中添加:
"files.associations": {
"*lua.txt": "lua",
},
配置Java环境
EmmyLua
需要Java环境的支持,可以直接去java的官网下载安装。安装完后需要配置JAVA_HOME
环境变量JAVA_HOME=XXX/Java/jre-1.8
,再在Path
里面添加一个路径$JAVA_HOME$/bin
。但是我这样添加环境变量后,发现EmmyLua
还是无法找到Java。后来发现EmmyLua的Settings里面有一个java.home
的变量:
这里可以看到,emmylua.java.home
的值为null
,需要将它设置为我们上面的JAVA_HOME
的值。再EmmyLua扩展的界面点击设置里面的Extension Settings
或者,打开命令面板(Ctrl+Shift+P),输出settings.json
,选择Open User Settings
打开用户的设置文件(.vscode/settings.json
是Workspace Settings
),在里面设置emmylua.java.home
的值
添加调试代码
上面已经说了,vscode和Unity一个客户端,一个服务端。如果ideConnectDebugger=true
,那么是vscode连接到Unity,Unity是服务端,vscode是客户端;false则相反。所以,我们开始运行lua的时候,需要和vscode建立连接,建立连接的API在emmy_core.dll
里面,路径是C:/Users/xxx/.vscode/extensions/tangzx.emmylua-0.5.19/debugger/emmy/windows/x64/emmy_core.dll
。所以在lua的开始我们需要加入下面的代码
local path = "C:/Users/xxx/.vscode/extensions/tangzx.emmylua-0.5.19/debugger/emmy/windows/x64/emmy_core.dll"
package.cpath = package.cpath .. ";" .. path #将emmy_core.dll的路径加入后,就可以使用require了
local dbg =require("emmy_core")
dbg.tcpConnect("localhost", 9966) #因为是ideConnectDebugger=false,vscode是服务端,使用connect;反之使用tcpListen
然后就可以开始调试了。
断点不生效的问题
按照上面完成所有操作后,你会发现连接成功了,但是断点没有生效。然后你的代码很可能是这样的(我使用的是xlua)
var luaEnv = new LuaEnv();
luaEnv.DoString(textAsset.text);
这是因为你没有指定chunkName
,emmylua不知道是哪个文件,所以断点没有生效。如果textAsset.text
是main.lua.txt
文件的内容,按照下面的修改断点就会生效了
var luaEnv = new LuaEnv();
luaEnv.DoString(textAsset.text, "main.lua.txt");