问题

在使用 EmmyLua 配合 Unity 进行调试时,需要先将调试启动代码添加到 Lua 初始化代码中。

由于初始化代码必须使用 EmmyLua 插件中 DLL 的 emmy_core 才能进行调试,而每个人的 EmmyLua 安装位置不同,导致调试启动代码也各不相同。

而调试时又必须添加 EmmyLua 调试启动代码,在提交代码时经常会忘记而误提交,导致他人更新后无法启动游戏。

解决思路

  1. 调试代码本身应该独立到单独的文件中,与其他代码分离。
  2. 有没有调试代码都不影响游戏正常运行。
  3. 调试代码每个人都不一样,因此不能提交到仓库中。
  4. 调试代码不在编辑器下时不应该加载。

解决方法

模板文件

首先应该建立一个模板文件,里面加入 EmmyLua 调试代码。

Assets/Lua/EmmyLuaDebugger.lua.example

将此文件与对应的 meta 文件提交到仓库。

调试文件

复制模板文件并将其改名为:

Assets/Lua/EmmyLuaDebugger.lua

将此文件与对应的 meta 文件加入到忽略列表中。SVN 是添加 svn:ignore 属性,Git 是添加到 .gitignore 文件中。

调试文件加载代码

使用 pcall 调用 require 加载调试文件,如果调试文件不存在则会有异常,然后输出一条错误消息。

1
2
3
4
5
6
if UnityEngine.Application.isEditor then
    local status, err = pcall(require, "EmmyLuaDebugger")
    if not status then
        print("EmmyLuaDebugger is not initialized\n" .. err);
    end
end

总结

这些东西原理上都很简单,但是可以减少开发人员在提交时要考虑的一个文件改动,有利于提升效率。