Skip to content

插件生命周期 ​

每个插件的主类必须继承 StudioMod.SDK.StudioPlugin。由于底层继承自 Unity MonoBehaviour,插件可以直接使用协程、生命周期回调与输入检测。

基类定义 ​

csharp
public abstract class StudioPlugin : MonoBehaviour
{
    // 插件元数据(包含 Id, Name, Version, Author 等)
    public StudioPluginInfo Info { get; }

    // 该插件专属的 Harmony 实例(Identifier 为 Plugin.Id)
    public Harmony HarmonyInstance { get; }

    // 该插件专属的 INI 配置文件管理器
    public PluginConfig Config { get; }

    // 分级日志记录器
    public IPluginLogger Logger { get; }

    // 插件加载完成并完成 Harmony 补丁自动注入后触发
    public virtual void OnLoaded();

    // 插件卸载前触发(预留)
    public virtual void OnUnloaded();
}

元数据特性 ​

StudioPluginAttribute 必须标记在继承了 StudioPlugin 的类上,供 LoaderManager 发现与识别:

csharp
[StudioPlugin("com.vendor.pluginid", "显示名称", "1.0.0", "作者名", "功能描述")]
参数类型说明
idstring唯一标识符,建议采用反向域名格式,如 com.author.modname
namestring在控制台与 UI 中显示的友好名称
versionstring语义化版本号,如 "1.0.0"
authorstring作者名称(可选)
descriptionstring插件描述(可选)

调用顺序 ​

插件实例化后,框架按下面的顺序驱动它:

  1. Awake() —— Unity 消息
  2. Setup(...) —— 注入 SDK 上下文属性(Info、Config、Logger、HarmonyInstance)
  3. HarmonyInstance.PatchAll(asm) —— 自动扫描并打上当前程序集内的所有 Harmony 补丁
  4. OnLoaded() —— 推荐在这里做初始化、配置绑定与事件监听
  5. Start() —— Unity 消息
  6. Update() / FixedUpdate() / OnGUI() —— 常规 Unity 帧驱动
  7. OnApplicationFocus(bool) —— 焦点切换监听
  8. OnDestroy() / OnUnloaded() —— 清理资源

为什么初始化要写在 OnLoaded

OnLoaded() 被调用时,补丁已经注入完毕、配置与日志器都已就绪。在 Awake() 里访问 Logger 或 Config 会拿到未初始化的对象。

线程约定 ​

UI 创建、更新与销毁都在 Unity 主线程执行。耗时计算与文件读写不要放在 NGUI 的逐帧布局/刷新回调里,需要时用协程或后台线程把结果切回主线程。

为 BrickLink Studio 2.0 打造的第三方 Mod 加载框架 · 与 BrickLink / LEGO 官方无关联