unity中三种数据存储方式ScriptableObject,Json,Xml
准备
我以Dictionary类型作为案例存储的数据类型,向大家介绍如何将数据序列化,如何将数据存储为ScriptableObject,Json,Xml等形式
这是我个人开发游戏所自定义的数据类型,之后的操作中会使用到
[Serializable]
public class Skill : ScriptableObject
{
public string sname;
public SkillType type;
public int power;//威力
public int hitRate;//命中率
public int fullPP;//pp上限
public int curPP;//当前pp值
//属性
public PokeomonAttributes att;
}
public enum SkillType
{
物理,
特殊,
变化
}
private static Dictionary<int, Skill> allSkillDic = new Dictionary<int, Skill>();//allSkillDic是要存储的数据
ScriptableObject
简介
ScriptableObject是unity自带的一个类,继承于UnityEngine.Object,可用于制作数据配置文件,或编辑器扩展便于可视化编辑,unity会自动将这个继承ScriptableObject的类序列化,可控性弱,但用于数据的加载是效率最高的。
编写序列化类
由于ScriptableObject的使用要求,我们需要专门编写一个脚本作为所需要存储的数据类型
public class PokemonSkillsData :ScriptableObjectDictionary<int,Skill>
{
//需要专门为这几行代码编写一个cs文件
}
由于博主自己的游戏初始化需要加载大量的数据配置文件,博主选择编写一个泛型类减少代码量
由于Dictionary不是ScriptableObject支持可序列化的数据类型,实际序列化是我们要用2个List代替Dictionary序列化
using System;
using System.Collections.Generic;
using UnityEngine;
[Serializable]
public class ScriptableObjectDictionary<TKey, TValue> :ScriptableObject
{
[SerializeField]
public List<TKey> keys = new List<TKey>();
[SerializeField]
public List<TValue> values = new List<TValue>();
protected Dictionary<TKey, TValue> target;
public Dictionary<TKey, TValue> Target
{
get
{
return target;
}
set
{
target = value;
keys = new List<TKey>(Target.Keys);