ScriptableObject
Contents
ScriptableObject是什么
ScriptableObject是Unity提供的一个数据配置存储基类
他是一个可以用来保存大量数据的数据容器
就像是可以自定义的数据资源文件
他是一个类似MonoBehvior的基类
需要我们继承他来使用
ScriptableObject的作用
- 数据复用(多个对象可以使用一个配置)
- 配置文件(配置数据中的数据)
- 编辑模式下的数据持久化
ScriptableObject的好处
- 我们可以直接在Inspector窗口编辑配置数据,可以利用它来做配置文件
- 处理重复数据,减少数据拷贝时造成的内存占用,可以利用它来做公共数据
- 可以方便的处理数据带来的多态行为
创建ScriptableObject数据容器
- 继承ScriptableObject类
- 在该类中声明成员(变量,方法等)
public clss Test : ScriptableObject
{
public int a;
}根据自定义的ScriptableObject数据容器创建数据文件
方法1:为类添加CreateAssetMenu通过菜单创建资源特性
[CreateAssetMenu(fileName = "默认文件名", menuName = "在Asset/Create菜单中显示的名字", order = 再Asset/Create菜单中的位置(多个时可以通过它来调整顺序))]
public clss Test : ScriptableObject
{
public int a;
}方法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数据文件的使用
- Inspector面板中拖拽
- 通过资源加载的方式获取
MyData data = Resources.Load<MyData>("MyDataTest");ScriptableObject的生命周期函数
- Awake 数据文件创建时调用
- OnDestroy ScriptableObject 对象将被销毁时调用
- OnDisable ScriptableObject 对象销毁时、即将重新加载脚本程序集时 调用
- OnEnable ScriptableObject 创建或者加载对象时调用
- OnValidate 编辑器才会调用的函数,Unity在加载脚本或者Inspector窗口中更改值时调用
在游戏运行中创建ScriptableObject对象(非持久化)
MyData data;
data = ScriptableObject.CreateInstance("MyData") as MyData;
//泛型
data = ScriptableObject.CreateInstance<MyData>();