ScriptableObject是什么?
ScriptableObject是Unity提供的一个数据配置存储类,是一种自定义类型的数据资源文件;
继承自UnityEngine.Object;其实例会被保存为.asset类型的资源文件;
ScriptableObject主要作用:
- 编辑器模式下的数据持久化
- 配置文件(游戏中的数据)
- 数据复用,多个对象使用同一套数据
注意:在游戏发布后,ScriptableObject存储的数据不会被改变;
ScriptableObject的创建方法:
一:为继承自ScriptableObject类添加CreatMenuAsset特性,在编辑器的菜单中创建资源文件;
[CreateAssetMenu(fileName = nameof(MainWeaponSO), menuName = "SO/" + nameof(MainWeaponSO), order = 0)]
public class MainWeaponSO : ScriptableObject{}
二:利用ScriptableObject的静态方法创建对象,然后将数据对象保存在工程目录上;
public class CreatSO : Editor
{
[MenuItem("SO/WeaponSO")]
public static void CreatWeaponSO()
{
var weaponDate = CreateInstance<WeaponDate>();
AssetDatabase.CreateAsset(weaponDate, "Assets/Resources/So/WeaponSO.asset");
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
}
[Serializable]
public class WeaponDate : ScriptableObject
{
public string id;
public string attackInterval;
}
}
ScriptableObject中的生命周期函数
- Awake(数据文件创建时调用)
- Ondestory(数据文件销毁时调用)
- OnEnable(创建或者加载对象时调用)
- OnDisable(对象销毁时)
- OnValidate(编辑器情况下调用)
加载数据的方式
- 直接在数据面板拖拽
- 使用Resources,Addressables,AssetBundles等方式进行加载