模组教程
  • 🏠主页
  • 😀介绍
  • 😇玩家手册
    • 📕安装教程
    • 📔使用说明
    • 🐴注意事项
  • 😅模组制作教程
    • 😅预先准备
    • 😎创建一个模组
    • 😘常用NML功能
    • 🤔其他常用
    • 🥸BepInEx
  • 🤔基础概念
    • 👌模组声明
    • 🎨模组接口
    • 👌模组设置
    • 👍模组依赖
    • 🤗多语言文本
  • 😶‍🌫️资源加载
    • 📕概览
    • 😁Resources
    • 😂AssetBundle
  • 😪其他技术
    • 👌模组重载
    • 🫥事件监听
    • 😄上传模组
  • 🫨游戏内容添加
    • 🥳创建装备
  • 🤩用户交互界面
    • 🥳按钮
    • 😁交互栏
    • 😂内置预制体
    • 😄一般窗口
    • 😆自动布局窗口
  • 😘懒人福利
    • 😍基础模组
  • 🚗NML开发和OpenMods项目
    • 📕介绍
    • NML 开发
    • NML 模组文档
    • 示例模组
    • Unity开发工具包
    • 原版代码文档
Powered by GitBook
On this page
  • 介绍
  • 使用方法
  • 使用示例
  • 提示
  1. 其他技术

模组重载

介绍

这可以说是整个NML里最有技术的一个内容了, 但它的使用方法非常简单.

你只需要会加一行[Hotfixable], 设置Config.isEditor=true, 然后点一下按钮就差不多了.

这个功能一般用来Debug, 考虑这样的一个场景:

这里有一个bug, 从游戏开始到这个bug触发需要非常长的一段时间.

这个bug在存读档后就会消失.

这个bug在出现后会保持一段时间.

如果采用原始的, 加Log, 然后不断重启游戏来获取信息, 并进行修改测试的方法, 毫无疑问, 会消耗极大量的时间.

如果你使用这个技术, 那么, 你可以暂停游戏, 然后现场修改模组代码并添加log或尝试修复bug, 然后简单地点击重载模组, 即可查看结果.

除此之外, UI设计也是, 在不使用Unity Editor(NeoMod的开发包可以使用Unity Editor进行设计并使用IDE调试模组, 尚未公开, 但C# 8实在不好用), 纯靠代码, 也可以在模组主类的Reload中添加对UI组件的摧毁和重新初始化.

使用方法

  1. 让你的模组主类实现IReloadable模组功能接口.

  2. 运行游戏

  3. 遇到问题

  4. 给需要修改的函数添加Hotfixable特性

  5. 修改函数

  6. 点击游戏内的模组重载按钮

使用示例

视频没录, 等等吧, 上面应该说得很清楚了.

提示

  1. MonoBehaviour的几个如Awake,Update等函数无法添加Hotfixable特性

  2. 构造函数和析构函数不能添加Hotfixable特性

  3. Reload函数本身也能添加Hotfixable特性

  4. 你可以在游戏运行时给别的函数加上Hotfixable

  5. 你可以在游戏运行时定义新的函数, 也需要标注Hotfixable

  6. 匿名函数也可以标注Hotfixable进行热更新, 下面所示代码

trait.action_special_effect = [Hotfixable] (pTarget, pTile) =>
{
    LogService.LogInfo("Before hotfixed trait action");
}
PreviousAssetBundleNext事件监听

Last updated 1 year ago

😪
👌
代码的示例第一部分
代码的示例第二部分