Unity中如何使用Rider调试C#和lua代码

工作中经常需要调试lua代码,之前使用VS调试C#代码,使用Intellij Idea来调试lua代码,这样其实比较麻烦,所以查了一下,可以直接使用Rider来统一的调试C#和lua代码

Rider安装:

Rider下载:Rider官网下载,根据需要选择对应的版本,建议使用Rider2020.1.0,参考链接

使用Rider调试C#代码:

打开Unity,在preference中设置为Rider,当双击C#文件时则会自动使用Rider打开:

Unity中如何使用Rider调试C#和lua代码_第1张图片

在Rider菜单栏中选择“Attach to Unity Editor”:
Unity中如何使用Rider调试C#和lua代码_第2张图片

注意:

1.一般选择“Attach to Unity Editor”,不要选择“Attach to Unity Editor & Play”。后者在点击调试图标后会自动启动Unity —— 有些情况为了方便调试并不需要自动启动Unity。两者区别仅仅在于是否调试时自动启动Unity,可以根据具体情况而定

2.在断点C#代码时需要先启动Rider中的调试,然后运行Unity。

使用Rider断点C#代码很简单,因为在安装Rider后可以将Unity和Rider关联起来,代码调试很简单

使用Rider调试Lua代码:

1.安装EmmyLua插件用于lua调试:

在Rider菜单栏“File -> Settings”:

Unity中如何使用Rider调试C#和lua代码_第3张图片

2.配置LuaDebugger:

点击“Edit Configuration”: 

 Unity中如何使用Rider调试C#和lua代码_第4张图片

点击左上角“+”添加LuaDebugger:
Unity中如何使用Rider调试C#和lua代码_第5张图片

设置LuaDebugger的Name以及Connection方式:

Unity中如何使用Rider调试C#和lua代码_第6张图片

3.LuaDebugger有两种Conection方式

方式一:Rider充当服务器 —— Tcp (Debugger connect IDE)

Rider先启动调试模式,等待Unity启动后连接

1.根据LuaDebugger中的设置,需要将“dbg.tcpConnect”粘贴入lua代码中:

Unity中如何使用Rider调试C#和lua代码_第7张图片

2.找到C#调用Lua代码最初始的文件,如“GameMain.lua”等,在代码顶部添加:

Unity中如何使用Rider调试C#和lua代码_第8张图片

或者也可以将以上拷贝的“dbg.tcpConnect”等代码放进独立的lua脚本"EmmyLuaDebgger.lua"中,然后在“GameMain.lua”中“Require EmmyLuaDebugger”也可以:

如新建“EmmyLuaDebugger.lua”脚本:

-- TCP (Debugger connect IDE)
package.cpath = package.cpath .. ';C:/Users/Frank/AppData/Roaming/JetBrains/Rider2021.3/plugins/EmmyLua/debugger/emmy/windows/x64/?.dll'
local dbg = require('emmy_core')
dbg.tcpConnect('localhost', 9966)

在GameMain.lua中:

Unity中如何使用Rider调试C#和lua代码_第9张图片

3.启动Rider调试模式:

Unity中如何使用Rider调试C#和lua代码_第10张图片

选择“LuaDebugger”后,点击“Debug”按钮开启调试:

然后运行Unity,自动连接成功后即可正常进行断点lua代码

方式二:Unity充当服务器 —— Tcp(IDE connect debugger)

先启动Unity,等待Rider连接后调试

1.复制“dbg”连接代码:

Unity中如何使用Rider调试C#和lua代码_第11张图片

2.新建EmmyLuaDebugger.lua文件:

--[[-- TCP (Debugger connect IDE)
package.cpath = package.cpath .. ';C:/Users/Frank/AppData/Roaming/JetBrains/Rider2021.3/plugins/EmmyLua/debugger/emmy/windows/x64/?.dll'
local dbg = require('emmy_core')
dbg.tcpConnect('localhost', 9966)]]

-- TCP (IDE connect debugger)
package.cpath = package.cpath .. ';C:/Users/Frank/AppData/Roaming/JetBrains/Rider2021.3/plugins/EmmyLua/debugger/emmy/windows/x64/?.dll'
local dbg = require('emmy_core')
dbg.tcpListen('localhost', 9966)
dbg.waitIDE()                       -- 这句话非常重要,否则无法确定Rider连接状态

 3.在C#最初调用Lua代码的地方执行该脚本:

在“GameManager.cs”中添加如下语句:
Unity中如何使用Rider调试C#和lua代码_第12张图片

PS:

1.该模式下需要在"dbg.tcpListen"末尾添加“dbg.waitIDE()”语句,否则启动Unity后会直接运行,并不会出现“等待Rider连接的阶段”,这样是无法正常断点调试的。

“dbg.waitIDE()”执行后,Unity会直接卡住,此时只有在Rider连接成功后Unity才会继续执行

2.由于执行“dbg.waitIDE”后Unity会直接卡住,等待Rider连接。此时可以添加一些解释说明以提醒启动Rider调试,例如在“GameManager.cs”中添加“OnGUI”显示,这个后面再添加具体实现方式

3.启动Unity,然后在Rider端启动调试即可正常断点lua代码

你可能感兴趣的:(开发日常,lua)