工作中经常需要调试lua代码,之前使用VS调试C#代码,使用Intellij Idea来调试lua代码,这样其实比较麻烦,所以查了一下,可以直接使用Rider来统一的调试C#和lua代码
Rider安装:
Rider下载:Rider官网下载,根据需要选择对应的版本,建议使用Rider2020.1.0,参考链接
使用Rider调试C#代码:
打开Unity,在preference中设置为Rider,当双击C#文件时则会自动使用Rider打开:
在Rider菜单栏中选择“Attach to Unity Editor”:
注意:
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”:
2.配置LuaDebugger:
点击“Edit Configuration”:
点击左上角“+”添加LuaDebugger:
设置LuaDebugger的Name以及Connection方式:
3.LuaDebugger有两种Conection方式
方式一:Rider充当服务器 —— Tcp (Debugger connect IDE)
Rider先启动调试模式,等待Unity启动后连接
1.根据LuaDebugger中的设置,需要将“dbg.tcpConnect”粘贴入lua代码中:
2.找到C#调用Lua代码最初始的文件,如“GameMain.lua”等,在代码顶部添加:
或者也可以将以上拷贝的“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中:
3.启动Rider调试模式:
选择“LuaDebugger”后,点击“Debug”按钮开启调试:
然后运行Unity,自动连接成功后即可正常进行断点lua代码
方式二:Unity充当服务器 —— Tcp(IDE connect debugger)
先启动Unity,等待Rider连接后调试
1.复制“dbg”连接代码:
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”中添加如下语句:
PS:
1.该模式下需要在"dbg.tcpListen"末尾添加“dbg.waitIDE()”语句,否则启动Unity后会直接运行,并不会出现“等待Rider连接的阶段”,这样是无法正常断点调试的。
“dbg.waitIDE()”执行后,Unity会直接卡住,此时只有在Rider连接成功后Unity才会继续执行
2.由于执行“dbg.waitIDE”后Unity会直接卡住,等待Rider连接。此时可以添加一些解释说明以提醒启动Rider调试,例如在“GameManager.cs”中添加“OnGUI”显示,这个后面再添加具体实现方式文章来源:https://www.toymoban.com/news/detail-412091.html
3.启动Unity,然后在Rider端启动调试即可正常断点lua代码文章来源地址https://www.toymoban.com/news/detail-412091.html
到了这里,关于Unity中如何使用Rider调试C#和lua代码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!