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]);
}
}
}
將新建的資源拖到腳本的屬性中
運行結果如下
個人更喜歡第二種方法,在數據量很小的時候,比使用數據庫或者文本存儲跟方便。