这可以说是整个NML里最有技术的一个内容了, 但它的使用方法非常简单.
你只需要会加一行[Hotfixable], 设置Config.isEditor=true, 然后点一下按钮就差不多了.
[Hotfixable]
Config.isEditor=true
这个功能一般用来Debug, 考虑这样的一个场景:
这里有一个bug, 从游戏开始到这个bug触发需要非常长的一段时间. 这个bug在存读档后就会消失. 这个bug在出现后会保持一段时间.
如果采用原始的, 加Log, 然后不断重启游戏来获取信息, 并进行修改测试的方法, 毫无疑问, 会消耗极大量的时间.
如果你使用这个技术, 那么, 你可以暂停游戏, 然后现场修改模组代码并添加log或尝试修复bug, 然后简单地点击重载模组, 即可查看结果.
除此之外, UI设计也是, 在不使用Unity Editor(NeoMod的开发包可以使用Unity Editor进行设计并使用IDE调试模组, 尚未公开, 但C# 8实在不好用), 纯靠代码, 也可以在模组主类的Reload中添加对UI组件的摧毁和重新初始化.
Reload
让你的模组主类实现IReloadable模组功能接口.
IReloadable
运行游戏
遇到问题
给需要修改的函数添加Hotfixable特性
Hotfixable
修改函数
点击游戏内的模组重载按钮
视频没录, 等等吧, 上面应该说得很清楚了.
代码的示例第一部分arrow-up-right
代码的示例第二部分arrow-up-right
MonoBehaviour的几个如Awake,Update等函数无法添加Hotfixable特性
MonoBehaviour
Awake
Update
构造函数和析构函数不能添加Hotfixable特性
Reload函数本身也能添加Hotfixable特性
你可以在游戏运行时给别的函数加上Hotfixable
你可以在游戏运行时定义新的函数, 也需要标注Hotfixable
匿名函数也可以标注Hotfixable进行热更新, 下面所示代码
Last updated 2 years ago
trait.action_special_effect = [Hotfixable] (pTarget, pTile) => { LogService.LogInfo("Before hotfixed trait action"); }