ScriptableObject類定制可序列化數(shù)據(jù)
這個(gè)類很有用,它可以打包數(shù)據(jù)對(duì)象,并且這個(gè)數(shù)據(jù)對(duì)象是序列化的,用來(lái)存儲(chǔ)數(shù)據(jù)非常方便,比json xml等更方便,容易存取,這里用它做一個(gè)簡(jiǎn)單的使用案例。
工具類ScriptableObjectUtility
打包工具類,需放到Editor文件夾內(nèi)
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;
}
}
創(chuàng)建對(duì)應(yīng)的數(shù)據(jù)類MyData
using UnityEngine;
using System.Collections.Generic;
public class YourClass : ScriptableObject {
public List<MyData> dialogue=new List<MyData>();
}
這個(gè)類中存儲(chǔ)你需要序列化存儲(chǔ)的打包數(shù)據(jù)
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> ();
}
}
生成數(shù)據(jù)文件
這里寫圖片描述
點(diǎn)擊YouClass按鈕就會(huì)生產(chǎn)如下文件
這里寫圖片描述
這時(shí)我們可以看到,這個(gè)文件可以進(jìn)行賦值操作的如下圖
這里寫圖片描述
讀取數(shù)據(jù)
首先創(chuàng)建代碼如下,當(dāng)然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);
}
}
}
將這個(gè)腳本放到場(chǎng)景物體上運(yùn)行Unity
這里寫圖片描述
本文工程:http://download.csdn.net/detail/warrenmondeville/9694660
本文連接:http://blog.csdn.net/warrenmondeville/article/details/53329038