Unity Editor 編輯器擴(kuò)展 四 ScriptableObject類定制可序列化數(shù)據(jù)

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

這里寫圖片描述
可以看到數(shù)據(jù)可以讀取啦。
本文工程:http://download.csdn.net/detail/warrenmondeville/9694660
本文連接:http://blog.csdn.net/warrenmondeville/article/details/53329038

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容