Unity3D-小規模初始化數據的存儲和讀取

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]);
		}
	}
}

將新建的資源拖到腳本的屬性中



運行結果如下



個人更喜歡第二種方法,在數據量很小的時候,比使用數據庫或者文本存儲跟方便。

發佈了164 篇原創文章 · 獲贊 152 · 訪問量 96萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章