找回密码
 立即注册
查看: 350|回复: 0

Unity+VSCode+XLua+断点调试

[复制链接]
发表于 2022-3-31 10:11 | 显示全部楼层 |阅读模式
Unity安装

去官网下个相对较新的版本,我这里是使用的2020.2.6f1,证书选择个人版。Unity下载页面
IDE安装

个人习惯使用VSCode,去官网下个新版就行。Visual Studio Code - Code Editing. Redefined

为了保证能对C#代码进行断点调试,我们还需要给IDE装上这个C#和DebuggerForUnity的插件。

编写C#代码并断点调试

新建一个Unity项目并打开,在编辑器顶部菜单栏找到Edit > Preferences > ExternalTools将External Script Editor引用改成VSCode。然后再回到Unity编辑器顶部菜单栏找到Assets > Open C# Project 打开我们的工程代码。

新建一个HelloWorld.cs


Ctrl+Shift+P呼出面板


按F5进入调试模式,选择当前正在运行的Unity程序


再回到Unity工程将HelloWorld.cs挂载到当前场景内,点击运行

正常情况下是能断点成功的,如果不正常,多半是系统的.NET版本没对,用这个试试NET Framework 4.7.1 Developer Pack-enu
代码热更方案

我选择的是腾讯的XLua,虽然没怎么深入了解过,但市面上已经有很多商业游戏对其进行过了验证,要满足我们的需求那自然是绰绰有余。

到GitHub上找到当前最新的发布版本 Release Tag:v2.1.16_android_release_lib · Tencent/xLua · GitHub 下载完成后解压一下,由README.md我们能得知一些XLua的基础概念与以下几点:

1.需要将Assets文件夹内的东西拷进Unity工程目录下的Assets文件夹内。(当然如果你有目录洁癖也可以删掉XLua文件夹下的Doc、Examples、Tutorial)

2.用c#执行一个Lua脚本。新建一个c#脚本,挂载到当前Unity场景内,脚本内容如下:
using XLua;using System.IO;    void Start()    {        // 启动lua管理器        LuaEnv _luaEnv = new LuaEnv();        // 重写lua内的require函数回调,方便自定义载入路径        _luaEnv.AddLoader(CustomLoader);        // 启动一个脚本载体        LuaTable _scriptEnv = _luaEnv.NewTable();        // 为该脚本添加XLua提供的全局变量及函数        LuaTable meta = _luaEnv.NewTable();        meta.Set("__index", _luaEnv.Global);        _scriptEnv.SetMetaTable(meta);        meta.Dispose();        _scriptEnv.Set("self", this);        // 执行该脚本        var _luaScript = LoadLuaFile("HelloWorld");        _luaEnv.DoString(_luaScript, "HelloWorld", _scriptEnv);        // 取到Lua脚本内的指定名称函数并运行        Action _luaFunction;        _scriptEnv.Get("MyFunction", out _luaFunction);        _luaFunction();        // 最后当你不再需要的时候,记得使用.Dispose()销毁脚本载体及管理器    }    /// <summary>    /// 自定义载入回调    /// </summary>    /// <param name="filepath"></param>    /// <returns></returns>    byte[] CustomLoader(ref string filepath)    {        filepath = filepath.Replace(".", "/");        return LoadLuaFile(filepath);    }    // 将自定义目录下指定名字的lua脚本加载为字节流    byte[] LoadLuaFile(string filePath)    {        var fileAddress = Path.Combine(Application.dataPath + "/Lua/", filePath + ".lua");        FileInfo _info = new FileInfo(fileAddress);        if (_info.Exists)        {            StreamReader r = new StreamReader(fileAddress);            return System.Text.Encoding.UTF8.GetBytes(r.ReadToEnd());        }        return null;    }
3.在Unity工程内Assets/Lua 目录下新建一个文本文档"HelloWorld.lua",打开进行如下编辑
print("Hello World")function MyFunction()    print("This is MyFunction")end
最后回到Unity运行场景,正常情况下这时控制台就会打印出你的"Hello World"和"This is MyFunction"了。
VSCode上断点调试Lua

我是使用的luaide,它除了能断点调试之外还有很多便捷功能,虽然是付费插件,但是100块买断的价格也算很亲民了,换设备也能继续使用,强烈推荐。


安装插件

安装完毕之后进行调试设置


打开VSCode设置界面,找到这个打钩

重启VSCode,正常情况等待片刻就会自动下载调试文件到本地

点击找到调试文件

把整个luadebug文件夹拷贝到Unity工程的Asstes/Lua下面,之后会看到Unity报LuaDebugTool.cs文件有错,点开纠正下语法错误,把无关的代码注释一下就好了。

然后把下面代码放在lua脚本内,保证它在最开始被执行到
local breakSocketHandle,debugXpCall = require("luadebug.LuaDebugjit")("localhost",7003)breakSocketHandle()
之后我们配置调试参数


会自动创建launch.json文件并且进行各种lua框架的调试配置,如果有代码洁癖的话,我们可以只保留XLua的,即
        {            "name": "Unity-xlua",            "type": "lua",            "request": "attach",            "runtimeType": "Unity",            "localRoot": "${workspaceRoot}",            "fileExtNames": [                ".lua",                ".txt",                ".lua.txt",                ".bytes"            ],            "port": 7003,            "printType": 1        },
完事后我们验证下成功与否,按下F5进入调试模式,再运行Unity场景


OhYeah,大功告成

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-9-22 15:34 , Processed in 0.066049 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表