U4S2——数据配置存储基类 ScriptableObject

ScriptableObject

ScriptableObject是Unity提供的一个数据配置存储基类
它是一个可以用来保存大量数据的数据容器,就像是可以自定义的数据资源文件

它是一个类似MonoBehavior的基类,需要我们继承它来进行使用
它的主要作用是:

  1. 数据复用(多个对象用同一个数据)
  2. 配置文件(配置游戏中的数据)
  3. 编辑模式下的数据持久化

主要讲解内容

  1. ScriptableObject是什么
    Unity提供的一个数据存储基类
  2. ScriptableObject的好处
    文件配置、数据复用、更好的处理数据带来的多态行为

本系列学习内容:

  • ScriptableObject 数据文件的创建

  • ScriptableObject 数据文件的使用

  • ScriptableObject 非持久数据

  • ScriptableObject 让其真正意义上的持久

  • ScriptableObject 的应用

    • 配置数据
    • 复用数据
    • 数据带来的多态行为
    • 单例模式化的获取数据

数据复用

比如一个子弹对象,以前我们通过面向对象的思想去做的话,
会写一个继承 MonoBehaviour​ 的脚本
相关的属性都会在这里声明,然后挂载到子弹模型预设体上
这样每次实例化一个子弹,如果数据不变,
那么对内存来说,是有一定浪费的
因为每一个子弹预设体上都有该脚本,那么所有的属性都会分配一次内存
通过使用 ScriptableObject​ 可以有效避免内存的浪费

image

配置文件

以前我们要通过配置文件配置游戏相关的数据,
比如玩家数据、怪物数据等等
是通过数据持久化相关知识来完成的,
我们一般会通过 xml、json、excel 等方式来配置游戏数据
相对来说都是在 Unity 外部通过其它格式的文件对数据进行配置
而通过 ScriptableObject​ 我们可以直接在 Unity 内部
Inspector​ 窗口中就可以进行数据的配置

image

编辑模式下的数据持久化

当我们在编辑模式下修改了继承 ScriptableObject​ 对象的数据文件内容时
这些修改将被记录下来,因此在编辑模式下 ScriptableObject​ 是具有数据持久化特性的
但是需要注意的是,在发布运行时后的 ScriptableObject​ 并不具备持久化特性(即发布运行时后,修改数据对象,并不会保存在本地)

ScriptableObject的好处

  1. 我们可以直接在 Inspector 窗口编辑配置数据,且在编辑模式下具备数据持久化特性,可以利用它来做配置文件
  2. 处理重复数据,减少数据拷贝时造成的内存占用,可以利用它来做公共数据
  3. 可以更方便的处理数据带来的多态行为

何时使用ScriptableObject

  • 主要应用点

    1. 配置文件
    2. 内置编辑器功能生成的数据文件(技能配置,关卡配置等等)
  • 次要应用点

    只用不改的公共数据

  • 注意!

    不建议使用 ScriptableObject​ 做数据持久化

其实目前我们想要制作的所有功能,就算不使用 ScriptableObject​ 也能够通过别的方式制作出来
所以不要“为了用而用”一定要根据自己的实际情况来选择使用,记住它的优点(配置方便、节约内存等等)
当遇到可以利用其优点更好的完成需求时,再使用它