1. 程式人生 > >簡單應用 - 在unity使用ScriptableObject製作配置檔案

簡單應用 - 在unity使用ScriptableObject製作配置檔案

一般在做遊戲開發的時候經常有需要製作配置檔案的需求,這樣可以給策劃或者程式提供一個檔案,他們只需要修改上面的值接可以達到修改遊戲一些設定的目的,這樣不用不斷地去修改程式碼了。

 

  很多人都會用到一些儲存資料的檔案,例如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。

 

wKioL1d0rL-ANOSTAAE7WnceOD8314.png-wh_50

在程式碼檔案上點選右鍵/create/globle(類名)

wKioL1d0rWvyGQi8AAAgjGQLTDc378.png-wh_50

看是不是很厲害,生成了一個帶有unitylogo的檔案j_0057.gif

 

wKioL1d0rhDxAsDJAAA4qWBbgwQ299.png-wh_50

選中這個檔案你可以看到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 ();


	}
}

wKioL1d0tDyCvfiVAAA_R0xc53Y800.png-wh_50

大功告成.

 

這就是簡單的配置檔案的製作過程,這個一般用於編輯器全域性變數的設定,希望大家能用得上,注意這個不能用於做遊戲存檔,因為打包之後這個檔案就無法修改了.

原文地址:http://blog.51cto.com/youyuan/1794533