1,什么是ScriptableObject
ScriptableObject 是 Unity 提供的一个数据配置存储基类,它是一个可以用来保存大量数据的数据容器,我们可以将它保存为自定义的数据资源文件。文章源自大腿Plus-https://www.zhaoshijun.com/archives/1910
ScriptableObject 是一个类似 MonoBehaviour 的基类,继承自 UnityEngine.Object。要想使用它,需要我们写个脚本去继承 ScriptableObject。需要注意的是,继承自 SctiptableObject 的脚本无法挂载到游戏物体上,毕竟它不是继承自 MonoBehaviour。文章源自大腿Plus-https://www.zhaoshijun.com/archives/1910
ScriptableObject 类的实例会被保存成资源文件(.asset文件),和预制体,材质球,音频文件等类似,都是一种资源文件,存放在 Assets 文件夹下,创建出来的实例也是唯一存在的。文章源自大腿Plus-https://www.zhaoshijun.com/archives/1910
2,如何创建 ScriptableObject文章源自大腿Plus-https://www.zhaoshijun.com/archives/1910
首先,创建一个脚本继承自 ScriptableObject 类。文章源自大腿Plus-https://www.zhaoshijun.com/archives/1910
为类添加 CreateAssetMenu 特性,在编辑器的菜单中创建资源文件,如下
1 2 3 4 5 6 |
[CreateAssetMenu(fileName = "TestData", menuName = "ScriptableObject/TestData")] public class TestData : ScriptableObject { public float value1; public float value2; } |
其中fileName是创建资源文件的默认名称,menuName是菜单中的路径文章源自大腿Plus-https://www.zhaoshijun.com/archives/1910
3,如何读取ScriptableObject文章源自大腿Plus-https://www.zhaoshijun.com/archives/1910
第一种方法是直接拖拽到Inspector 面板中,通过 Inspector 面板中的 public 变量进行关联。文章源自大腿Plus-https://www.zhaoshijun.com/archives/1910
第二种方法是可以用 Resources,AddressBundle,Addressables 等方式加载数据资源文件。文章源自大腿Plus-https://www.zhaoshijun.com/archives/1910
4,如何写入数据到ScriptableObject文章源自大腿Plus-https://www.zhaoshijun.com/archives/1910
要想写入数据只能在编辑器下,通过 Inspector 面板直接写入数据。如果想更便捷的使用工具修改,需要先读取数据,然后修改数据后,通过EditorUtility.SetDirty(ScriptableObject对象);进行保存,这个只能是在编辑器下使用,保存完成后最好用AssetDatabase.Refresh();刷新一下,才能看到变化
5,ScriptableObject的生命周期
1 2 3 4 5 |
Awake 数据文件创建时调用 OnDestroy 对象将被销毁时调用 OnEnable 创建或加载对象时调用 OnDisable 对象销毁时,即将加载脚本程序集时调用 OnValidate 编辑器才会调用的函数,Unity在加载脚本或者Inspector面板中更改值时调用 |
以上是对ScriptableObject的详细介绍,这个数据配置对象,对于游戏开发有优点也有缺点。优点是读取速度快,数据读写方便,对于通用数据可以有效避免内存的浪费。缺点是只能在编辑器下进行数据的更改,一旦打包就不能再去修改。总之优点是大于缺点的。
评论