1. 程式人生 > >Unity3D自定義資源配置檔案

Unity3D自定義資源配置檔案

配置資原始檔估計大家瞭解很多,比如XML、JSON、Protobuf、Excel、TXT等等

在開發過程中,將遊戲資料序列化到配置檔案中,專案執行時讀取配置檔案中的資料

本文另外介紹一個Unity的配置檔案(.asset)

該配置檔案的優點:

當我們需要將遊戲資源裡的貼圖(Texture)、遊戲物件(Gameobject)等預設體儲存到配置檔案時,這時我們就可以使用該配置檔案

但是當關聯的預設體丟失時,需要重新將預設體關聯起來

接下來,我寫了一個Demo,介紹在Unity3D建立自定義配置資原始檔點選開啟連結

【管理類】

建立一個管理類,提供函式來建立和讀取配置檔案(.asset)

在這裡我已經簡單的封裝好了,大家下載來後直接使用即可

using UnityEngine;
using System.Collections;
using System.IO;
using UnityEditor;

public class CustomConfigManager<T> where T : ScriptableObject//對泛型引數進行約束,使其只能是ScriptableObject的派生類
{

    private static CustomConfigManager<T> _instance;

    public static CustomConfigManager<T> GetInstance
    {
        get
        {
            if(_instance==null)
            {
                _instance=new CustomConfigManager<T>();
            }

            return _instance;
        }
    }

    private CustomConfigManager()
    { 
    }

    /// <summary>
    /// 將類例項化為配置檔案
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public static void CreateAsset()
    {
        //將物件例項化
        ScriptableObject so = ScriptableObject.CreateInstance(typeof(T));

        if (so == null)
        {
            Debug.Log("該物件無效,無法將物件例項化");
            return;
        }

        //自定義配置資源路徑
        string path = Application.dataPath + "/CustomConfigFile/MyFile";

        //判斷該路徑是否存在,不存在的話建立一個
        if (Directory.Exists(path)==false)
        {
            Directory.CreateDirectory(path);
        }


        //配置檔案以.asset結尾
        //將物件名配置成與類名相同
        path = string.Format("Assets/CustomConfigFile/MyFile/{0}.asset",typeof(T).ToString());

        //按指定路徑生成配置檔案
        AssetDatabase.CreateAsset(so,path);
    }


    /// <summary>
    /// 將配置檔案轉化為物件
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public static void GetAsset()
    {
        //配置檔名與物件名一致
        string name = typeof(T).ToString();
        string path = string.Format("Assets/CustomConfigFile/MyFile/{0}.asset",name);

        // 將配置檔案轉化為物件
        T obj = AssetDatabase.LoadAssetAtPath<T>(path);
    }
}


【建立可序列化類(演示)】

using UnityEngine;
using System.Collections;
using System;

public enum MyEnum
{
    START,
    PAUSE
}

/// <summary>
/// 該類可以序列化
/// </summary>
[Serializable]
public class CustomConfig : ScriptableObject//繼承ScriptableObject
{
    //需要例項化的變數將其設定為public或者設定其屬性為[Serializable]
    public MyEnum me = MyEnum.START;

    public Texture interge;

    [Range(0,10)]
    public float f;

    public GameObject obj;
}


【測試】

建立一個Editor資料夾,將指令碼新增到其中

建立好的管理類後,直接呼叫即可

using UnityEngine;
using System.Collections;
using UnityEditor;

public class MySelfText : MonoBehaviour 
{
    [MenuItem("AssetCreateOrGet/Create")]
    public static void Create()
    {
        CustomConfigManager<CustomConfig>.CreateAsset();
    }

    [MenuItem("AssetCreateOrGet/Get")]
    public static void Get()
    {
        CustomConfigManager<CustomConfig>.GetAsset();
    }
}


點選按鈕,成功建立配置檔案

Project檢視:

Inspector檢視:

本人也在尋找一份遊戲開發實習工作,如果大佬們需要開發人員,請把我帶走奮鬥

作品的話可以私聊我哦!