簡單應用 - 在unity使用ScriptableObject製作配置檔案
阿新 • • 發佈:2018-11-21
一般在做遊戲開發的時候經常有需要製作配置檔案的需求,這樣可以給策劃或者程式提供一個檔案,他們只需要修改上面的值接可以達到修改遊戲一些設定的目的,這樣不用不斷地去修改程式碼了。
很多人都會用到一些儲存資料的檔案,例如json,xml。這是一個辦法,但卻比較麻煩,有事後僅僅是為了儲存一些全域性變數而已,有種殺雞用牛刀的感覺,它需要有一個解析和儲存的方法而且不夠直觀。在我看來只需要使用ScriptableObject就可以快速做出一個方便好用的配置檔案了。
好直接上程式碼
using UnityEngine; using System.Collections; //由於右鍵建立配置檔案 [CreateAssetMenu()] public class GlobleData :ScriptableObject { public bool globle1=false; public int globle2 = 1; public GlobleType globleType; } public enum GlobleType{ type1, type2, type3 }
定義幾個配置檔案的變數,注意這個類必須繼承 ScriptableObject。
在程式碼檔案上點選右鍵/create/globle(類名)
選中這個檔案你可以看到Inspecter顯示出了我們剛才定義的引數我們可以自由設定,我們接下來要做的就是讀取這些值,我們直接把這個配置檔案放到Resources下面然後利用 Resources.Load<GlobleData> ("Globle Data");獲得配置檔案。
using UnityEngine; using System.Collections; public class ReadTest : MonoBehaviour { // Use this for initialization void Start () { GlobleData globleData = Resources.Load<GlobleData> ("Globle Data"); Debug.Log (globleData.globle1); Debug.Log (globleData.globle2); Debug.Log (globleData.globleType); } }
是不是非常簡單。
錦上添花,接下來我們再寫一個EditorWindows的編輯器視窗,用來編輯這個配置檔案.
using UnityEngine; using System.Collections; using UnityEditor; [ExecuteInEditMode] public class EasyWindows :EditorWindow { private Vector2 _scrollPos = Vector2.zero; SerializedObject globalData; [MenuItem("Window/GloblDataEditor")] static void Init() { GetWindow(typeof(EasyWindows)); } void OnEnable() { globalData = new SerializedObject (Resources.Load<GlobleData> ("Globle Data")); } void OnGUI() { _scrollPos = GUI.BeginScrollView( new Rect(0, 0, position.width, position.height), _scrollPos, new Rect(0, 0, 310, 310) ); EditorGUILayout.Space (); GUILayout.BeginVertical ("Globle", "window",GUILayout.Height(50)); EditorGUILayout.Space (); EditorGUILayout.PropertyField (globalData.FindProperty ("globle1")); EditorGUILayout.PropertyField (globalData.FindProperty ("globle2")); EditorGUILayout.PropertyField (globalData.FindProperty ("globleType")); GUILayout.EndVertical (); //一定要新增這個函式,不然修關閉專案後無法儲存 //EditorUtility.SetDirty(globalData); GUI.EndScrollView(); //一定要新增這個函式,不然修關閉專案後資料會丟失 globalData.ApplyModifiedProperties (); } }
大功告成.
這就是簡單的配置檔案的製作過程,這個一般用於編輯器全域性變數的設定,希望大家能用得上,注意這個不能用於做遊戲存檔,因為打包之後這個檔案就無法修改了.