Unity+Vscode+EmmyLua+XLua 调试实战

碎碎念

主播深受调试困难之苦,于是想着尝试一下如何调试Lua脚本,在神秘AI的发力下搞了半天终于走通了一次,记录一下本次过程,主播用的是VSCODE来写Unity,装的Xlua框架,使用EmmyLua调试器,EmmyLua的github地址如下
https://github.com/EmmyLua/VSCode-EmmyLua?utm_source=chatgpt.com

看着跟着文档走就差不多了其实

过程

1.给VScode安装EmmyLua拓展

在插件商店安装

在网址安装

https://marketplace.visualstudio.com/items?itemName=tangzx.emmylua

2.添加调试器配置 EmmyLua New Debug

打开调试器配置面板,点击小齿轮

进入launch.json文件,点击Add Configuration按钮添加配置

在跳出来的菜单里选择EmmyLua NewDebug 配置

3.给调试的lua脚本添加服务监听器代码

找到你要调试的lua脚本,把光标放在文件开头,使用快捷键ctrl+shift+P 打开顶上的快捷搜索栏,输入

复制代码
EmmyLua : Insert Emmy Debugger Code 

在下拉框中选择X64/X86 (如果报错就换一个,一个一个试试)

4.给lua脚本添加几个断点

我标了两个框框,由于一些原因,上面那个框框的断点是打不到的,只有下面这个框框能打到,稍后会解释这个原因。

5.使Unity进入播放模式

6.在VScode开启EmmyLua NewDebug 模式

在Debug面板选择EmmyLua NewDebug调试器,然后运行

7.回到Unity,如果执行到了断点脚本,就可以知道成功Debug了

总结

这个流程要Unity进入播放模式,VScode再开启调试模式,才能识别到断点,这导致比如初始化函数比如Lua侧的Awake,new这些打的断点是有可能无效的,这就是我在上文中提起的原因。这个流程相比于进行CS脚本调试那般,随时进入播放模式,随时进入VScode调试模式是不太方便的,有没有更好的办法?

后续

关于我上面提到的方法,在神秘AI的发力下也找到了,就是在那个代码片段后面加一个这个

lua 复制代码
dbg.waitIDE()

变成这样,就可以解决我上面的问题了,我真傻,真的

相关推荐
寂寞的船1 天前
【Unity知识速递】第8期 IL2CPP 托管堆内存碎片与原生堆交互机制深度解析
unity·游戏引擎·交互
寂寞的船2 天前
【Unity知识速递】第5期 Unity 6.2 深度解析:AI Assistant 登场,World Space UI 与 Sentis 全面升级
人工智能·ui·unity
寂寞的船2 天前
【Unity知识速递】第4期 MCP for Unity:用 AI 自然语言控制编辑器
人工智能·unity·编辑器
淡海水2 天前
09-04-内存-Unity原生对象生命周期
unity·c#·游戏引擎·gc
寂寞的船2 天前
【Unity知识速递】第6期 URP性能优化完全指南:从内存到GPU的三维调优
unity·性能优化·编辑器
寂寞的船2 天前
【Unity Bug挑战】第10期 SerializeReference 内存泄漏之谜
unity·c#·游戏引擎·bug
tealcwu4 天前
【Unity基础】为什么游戏需要物理按键映射?从 Unity Input Manager 到跨引擎输入设计
java·游戏·unity
tealcwu5 天前
【Unity高级】Unity URP:构建同时支持 2D 与 3D 场景的项目完全指南
3d·unity·游戏引擎
淡海水5 天前
10-01-互操作-C#与C++边界的内存管理
unity·c#·游戏引擎·.netcore·gc
小小数媒成员5 天前
UGUI原理(一)
开发语言·游戏·unity·游戏引擎