Unity进阶之ScriptableObject

文章详细介绍了Unity中的ScriptableObject概念,包括其作为数据存储容器、数据复用、配置文件、编辑模式下的数据持久化以及如何创建和使用数据文件。还探讨了非持久数据、持久化存储、单例模式化获取数据等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ScriptableObject 概述

ScriptableObject是什么
ScriptableObject是Unity提供的一个数据配置存储基类
它是一个可以用来保存大量数据的数据容器
就像是可以自定义的数据资源文件
它是一个类似MonoBehavior的基类
需要我们继承它来进行使用
它的主要作用是
1.数据复用(多个对象用同一个数据)
2.配置文件(配置游戏中的数据)
3.编辑模式下的数据持久化
数据复用
比如一个子弹对象
以前我们通过面向对象的思想去做的话
会写一个继承MonoBehaviour的脚本
相关的属性都会在这里声明
然后挂载到子弹模型预设体上
这样每次实例化一个子弹,如果数据不变
那么对内存来说,是有一定浪费的
因为每一个子弹预设体上都有该脚本
那么所有的属性都会分配一次内存
通过使用ScriptableObject可以有效避免内存的浪费
配置文件
以前我们要通过配置文件配置游戏相关的数据,比如玩家数据、怪物数据等等
是通过数据持久化相关知识来完成的,我们一般会通过xml、json、excel等方式来配置游戏数据
相对来说都是在Unity外部通过其它格式的文件对数据进行配置
而通过ScriptableObject我们可以直接在Unity内部
在Inspector窗口中就可以进行数据的配置
编辑模式下的数据持久化
当我们在编辑模式下修改了继承ScriptableObject对象的数据文件内容时
这些修改将被记录下来
因此在编辑模式下ScriptableObject是具有数据持久化特性的

但是需要注意的是,在发布运行时
ScriptableObject并不具备持久化特性(修改数据对象,并不会保存在本地)
ScriptableObject的好处
1.我们可以直接在Inspector窗口编辑配置数据,可以利用它来做配置文件
2.处理重复数据,减少数据拷贝时造成的内存占用,可以利用它来做公共数据
3.可以更方便的处理数据带来的多态行为

ScriptableObject数据文件的创建

自定义ScriptableObject数据容器
1.继承ScriptableObject类
2.在该类中声明成员(变量、方法等)

注意:声明后,我们边可以在Inspector窗口中看到变化
我们可以在其中进行设置,但是这些设置都是默认数据,并没有真正使用他们
这些关联信息都是通过脚本文件对应的Unity配置文件meta进行记录的
目前该数据只是一个数据容器模板
有了它我们之后才能根据它的信息创建对应的数据资源文件

根据自定义的ScriptableObject数据容器创建数据文件
注意:
该创建功能,其实就是根据自定义数据容器类创建了一个配置文件
该文件中记录了对应的数据容器类信息,以及其中变量关联的信息
之后我们在使用它时,本质上也是通过反射创建对象进行使用

具体的方法有两种:
//1.为类添加CreateAssetMenu通过菜单创建资源特性
[CreateAssetMenu(fileName = “默认文件名”, menuName = “在Asset/Create菜单中显示的名字”, order = 再Asset/Create菜单中的位置(多个时可以通过它来调整顺序))]

2.利用ScriptableObject的静态方法创建数据对象
然后将数据对象保存在工程目录下

public class ScriptableObjectTool
{
   
   
    [MenuItem("ScriptableObject/CreateMyData")]
    public static void CreateMyData()
    {
   
   
        //书写创建数据资源文件的代码
        MyData asset = ScriptableObject.CreateInstance<MyData>();

        //通过编辑器API 根据数据创建一个数据资源文件
        AssetDatabase.CreateAsset(asset, "Assets/Resources/MyDataTest.asset");
        //保存创建的资源
        AssetDatabase.SaveAssets();
        //刷新界面
        AssetDatabase.Refresh();
    }
}

ScriptableObject好处的体现
1.更方便的配置数据,我们可以直接在Inspector当中配置数据
2.项目之间的复用,我们可以拷贝继承ScriptableObject的脚本到任何工程中

数据文件的使用

ScriptableObject数据文件的使用
1.通过Inspector中的public变量进行关联
1-1.创建一个数据文件
1-2.在继承MonoBehaviour类中申明数据容器类型的成员
在Inspector窗口进行关联

2.通过资源加载的信息关联
加载数据文件资源
注意:Resources、AB包、Addressables都支持加载继承ScriptableObject的数据文件

data = Resources.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值