SuperAPI AI 工具集

unity-scriptableobjects

数据与分析

查看项目

更新于 10-15 21:49

技能介绍

用途:在 Unity 6.3 LTS(6000.3)中用 ScriptableObject 资产存放共享数据、解耦系统,包括可设计师编辑的配置(武器数值、关卡数据)、跨系统共享的单一变量、通过事件通道解耦发送方与监听方,以及活动对象的运行时注册表,替代静态/单例管理器。适用于项目中存在以 ScriptableObject 类为后端的 *.asset 数据文件。

主要能力与用法:定义继承 ScriptableObject 的类并加 [CreateAssetMenu] 标签,让设计师可从 Assets 菜单创建实例;在 Project 窗口创建 .asset 实例,用 [SerializeField] 字段引用,引用而非复制,所有消费者看到同一份数据。事件通道与共享变量也建模为 ScriptableObject,例如 HUD 读取、玩家写入的 FloatVariable,双方互不引用。运行时创建的临时数据可用 ScriptableObject.CreateInstance<T>(),用完 Destroy。若在运行时修改资产,需在 OnEnable 中重置运行时值,否则编辑器中的修改会保留在资产上。

限制:ScriptableObject 被所有引用者共享,不适合每个 GameObject 各不相同的实例状态(应放在 MonoBehaviour);它不是存档方案,玩家进度应交给 save-systems;普通 DTO 若无需成为资产,用 [System.Serializable] 类即可。它没有 Update 等逐帧回调,仅有 OnEnable/OnDisable/OnDestroy。禁用 Domain Reload 时 OnEnable 不会触发,需用 ISerializationCallbackReceiver 或场景加载钩子显式重置;CreateInstance 创建的对象不会被自动回收,需手动 Destroy。事件通道与运行时集合的细节见参考资料,主要文档为 Unity 手册 ScriptableObject 页面。