【Unity】ScriptableObject
发布于 2021-08-31
简介
ScriptableObject是用来存储数据的一个资源文件,像是JSON、XML、文本文件这样的存储文件,可以用来存储数据。但是这里他在最开始的时候不需要再读文件,就想是JSON在游戏开始时,我们需要加载JSON文件中的数据,我们就需要读取这个文件,然后在赋值给对象。他就可以直接使用其中的数据。因为他是资源文件,所以他有着资源文件的特性,我们Resource.Load他就可以使用他了。
其实可以简单的理解为把你所有的数据都用变量在一个类中声明,然后我们使用的时候,直接实例化这个类就好了。
优势
- 不会被unity序列化机制影响,故可以多场景共用。
- 可以作为一个引用在脚本上,因为它是资源文件
- 在实例化对象时用它来做配置文件降低了内存的消耗
- 有自己的回调OnEnable、OnDisable、OnDestroy
解决了什么问题
- ScriptableObject的数据存储在asset里面,退出时不会重置数据,就像unity里的材质,纹理等资源数据一样
- 这些资源在实例化的时候是可以被引用,而不是复制
- 可以在场景间共享
- 在项目之间共享
用法
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[Serializable]
public class MyObj
{
public int age;
public string name;
}
[CreateAssetMenu]
public class MySciptObj : ScriptableObject
{
public List<MyObj> myObjs;
public void Print()
{
for(int i=0,iMax=myObjs.Count;i<iMax;i++)
{
Debug.Log("Name:"+myObjs[i].name+"Age:"+myObjs[i].age);
}
}
public void Save(string name,int age)
{
myObjs.Add(new MyObj { name=name,age=age});
}
}