目錄
ScriptableObject類定製可序列化數據
這個類很有用,它可以打包數據對象,並且這個數據對象是序列化的,用來存儲數據非常方便,比json xml等更方便,容易存取,這裏用它做一個簡單的使用案例。
工具類ScriptableObjectUtility
打包工具類,需放到Editor文件夾內
using UnityEngine;
using UnityEditor;
using System.IO;
public static class ScriptableObjectUtility
{
// This makes it easy to create, name and place unique new ScriptableObject asset files.
public static void CreateAsset<T> () where T : ScriptableObject
{
T asset = ScriptableObject.CreateInstance<T> ();
string path = AssetDatabase.GetAssetPath (Selection.activeObject);
if (path == "")
{
path = "Assets";
}
else if (Path.GetExtension (path) != "")
{
path = path.Replace (Path.GetFileName (AssetDatabase.GetAssetPath (Selection.activeObject)), "");
}
string assetPathAndName = AssetDatabase.GenerateUniqueAssetPath (path + "/New " + typeof(T).ToString() + ".asset");
AssetDatabase.CreateAsset (asset, assetPathAndName);
AssetDatabase.SaveAssets ();
AssetDatabase.Refresh();
EditorUtility.FocusProjectWindow ();
Selection.activeObject = asset;
}
}
創建一個可打包的數據類YouClass
using UnityEngine;
using System.Collections.Generic;
public class YourClass : ScriptableObject {
public List<MyData> dialogue=new List<MyData>();
}
創建對應的數據類MyData
這個類中存儲你需要序列化存儲的打包數據
using UnityEngine;
using System.Collections;
[System.Serializable]
public class MyData{
public enum sexual {male ,female};
public string Name;
public int age;
public string dialogue;
public AudioClip m_audio;
}
打包按鈕
加一句廢話,要放到Editor文件夾裏面
using UnityEngine;
using UnityEditor;
public class YourClassAsset
{
[MenuItem("Assets/Create/YourClass")]
public static void CreateAsset ()
{
ScriptableObjectUtility.CreateAsset<YourClass> ();
}
}
生成數據文件
完成以上步驟,我們就可以打包了
點擊YouClass按鈕就會生產如下文件
這時我們可以看到,這個文件可以進行賦值操作的如下圖
讀取數據
首先創建代碼如下,當然New YourClass文件要放到Resources文件夾下
using UnityEngine;
using System.Collections;
public class LoadClass : MonoBehaviour {
void Start () {
YourClass dia= Resources.Load ("New YourClass") as YourClass;
for (int i = 0; i < dia.dialogue.Count; i++) {
MyData data = dia.dialogue [i];
Debug.Log (data.name+"--- "+data.age+" :"+data.dialogue);
}
}
}
將這個腳本放到場景物體上運行Unity
可以看到數據可以讀取啦。
本文工程:http://download.csdn.net/detail/warrenmondeville/9694660
本文連接:http://blog.csdn.net/warrenmondeville/article/details/53329038