外观
插件生命周期
每个插件的主类必须继承 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", "作者名", "功能描述")]| 参数 | 类型 | 说明 |
|---|---|---|
id | string | 唯一标识符,建议采用反向域名格式,如 com.author.modname |
name | string | 在控制台与 UI 中显示的友好名称 |
version | string | 语义化版本号,如 "1.0.0" |
author | string | 作者名称(可选) |
description | string | 插件描述(可选) |
调用顺序
插件实例化后,框架按下面的顺序驱动它:
Awake()—— Unity 消息Setup(...)—— 注入 SDK 上下文属性(Info、Config、Logger、HarmonyInstance)HarmonyInstance.PatchAll(asm)—— 自动扫描并打上当前程序集内的所有 Harmony 补丁OnLoaded()—— 推荐在这里做初始化、配置绑定与事件监听Start()—— Unity 消息Update()/FixedUpdate()/OnGUI()—— 常规 Unity 帧驱动OnApplicationFocus(bool)—— 焦点切换监听OnDestroy()/OnUnloaded()—— 清理资源
为什么初始化要写在 OnLoaded
OnLoaded() 被调用时,补丁已经注入完毕、配置与日志器都已就绪。在 Awake() 里访问 Logger 或 Config 会拿到未初始化的对象。
线程约定
UI 创建、更新与销毁都在 Unity 主线程执行。耗时计算与文件读写不要放在 NGUI 的逐帧布局/刷新回调里,需要时用协程或后台线程把结果切回主线程。