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,大功告成
|