首页/ 第 6 章 · 游戏对象与组件交互/ 第 85 课
LESSON 85 · 游戏对象与组件交互

ScriptableObject 数据对象

ScriptableObject 已掌握。下一课学游戏架构核心:单例模式。

⏱ 约 16 分钟📊 难度:入门🗂 第 6 章 · 游戏对象与组件交互📍 第 85 / 300 课
课程进度
85 / 300

🎯本节学习目标

  • 理解 ScriptableObject 概念
  • 掌握创建数据资产
  • 用资产存游戏配置

🚀课程导读

把“物品属性、武器数值、关卡配置”做成独立的数据资产文件,改数据不用改代码、还能批量复用。这就是 ScriptableObject。

ScriptableObject 是什么

“数据变成资产文件”。

  1. ScriptableObject 是一种“数据容器”,可以生成 .asset 资源文件存放在 Project 里。
  2. 与普通类区别:普通类数据存在场景/脚本里;SO 数据存在独立资产文件里,可被多个对象共享。
  3. 【典型用途】物品定义、武器参数、敌人配置、关卡数据、对话文本。
  4. 【好处1】可视化编辑数据(Inspector 里改数值即改资产)。
  5. 【好处2】一份数据多场景/多对象复用。
  6. 【好处3】方便策划配置、版本管理。
  7. 【注意】SO 存的是数据不是逻辑,适合“静态配置”;运行时改动不自动保存。
💡
记忆:ScriptableObject = 数据版的预制体——预制体复用“对象+组件”,SO 复用“数据”。

创建并使用 SO 资产

一步步做“物品数据”。

  1. 创建脚本 ItemData(继承 ScriptableObject):
  2. using UnityEngine;
  3. [CreateAssetMenu(fileName = "NewItem", menuName = "Game/Item Data")]
  4. public class ItemData : ScriptableObject { public string itemName; public string description; public int value; public Sprite icon; }
  5. 保存编译后,在 Project 右键 →【Create】→【Game/Item Data】,生成一个 .asset 文件。
  6. 选中它,在 Inspector 填写名字、描述、价值、图标。
  7. 再创建一个不同的 ItemData 资产(如“金币”“药水”),数据各自独立。
  8. 【引用使用】脚本里声明 public ItemData item; 在 Inspector 把资产拖入,读取 item.itemName。
  9. 【创建资产代码】ScriptableObject.CreateInstance<T>()(进阶)。
  10. 【注意事项】字段会被序列化,别放运行时状态(每帧变的值)。
物品、武器、敌人、关卡……把配置抽成 SO,是游戏数据架构的核心之一。

常见错误与排查

错误:Create 菜单里看不到自定义选项?
原因:脚本没加 CreateAssetMenu 特性或未编译
解决:确认脚本继承 ScriptableObject 并带 [CreateAssetMenu(...)] 特性,保存后刷新。

动手练习

课后小任务(做出来才算真的学会)

  • 创建一个武器数据 SO 资产
  • 创建 3 种武器资产并填不同数值
  • 在另一个脚本中引用并打印武器属性

本节小结

ScriptableObject 已掌握。下一课学游戏架构核心:单例模式。

完成打卡后,主站会实时更新你的学习进度 🎯

← 上一课序列化字段 [SerializeField] 与 [Header]