Unity中会用到一些体量很小的数据,例如游戏的一些初始化的数据,仅在编辑的时候需要修改。
这个时候,如果用txt存储,读取和设置会毕竟麻烦,如果用数据库又搞的比较复杂。
这时候可以有两种方法处理,一种是将数据存储在预制件里,另外是利用ScriptableObject将数据存储为资源。
假设有物品数据,仅2、3条。
物品类,记得序列化
Item.cs
using UnityEngine;
[System.Serializable]
public class Item {
public int id;
public string name;
public Sprite icon;
public Color color;
public Vector3 posion;
}
方法一,将数据存储在预制件里
新建一个类
DataPfb.cs
using UnityEngine;
using System.Collections;
public class DataPfb : MonoBehaviour {
public Item[] items;
}
将其拉到游戏对象中,做成预制件。
图中绿框里的就是数据。
只要该预制件在场景中,用
FindObjectOfType<DataPfb>().items[i]
就可以读取数据。
方法二、利用ScriptableObject将数据存储为资源
新建脚本ItemSet.cs
using UnityEngine;
using System.Collections;
using UnityEditor;
public class ItemSet : ScriptableObject {
#if UNITY_EDITOR
[UnityEditor.MenuItem ("innyo/Create item set")]
public static void CreateItemSet ()
{
var objSet = CreateInstance<ItemSet> ();
string savePath = EditorUtility.SaveFilePanel (
"save",
"Assets/",
"ItemAsset",
"asset"
);
if (savePath != "") {
savePath ="Assets/"+ savePath.Replace (Application.dataPath, "");
UnityEditor.AssetDatabase.CreateAsset (objSet, savePath);
UnityEditor.AssetDatabase.SaveAssets ();
}
}
#endif
public Item[] items;
}
这时候,菜单会多出一项,
点击以后,会提示保存文件的地址
保存以后会多出一个资源文件
点击以后,可以编辑数据
使用方法如下,
脚本新建一个公开属性,是资源的类型
using UnityEngine;
using System.Collections;
public class use : MonoBehaviour {
public ItemSet itemSet;
// Use this for initialization
void Start () {
Debug.Log ("start itmes...");
for (int i = 0; i < itemSet.items.Length; i++) {
Debug.Log (itemSet.items[i].name);
}
Debug.Log ("start info...");
for (int i = 0; i < itemSet.info.Length; i++) {
Debug.Log (itemSet.info[i]);
}
}
}
将新建的资源拖到脚本的属性中
运行结果如下
个人更喜欢第二种方法,在数据量很小的时候,比使用数据库或者文本存储跟方便。