[unity框架] 1.unity基礎框架---BaseFrameWork(一)
我從16年後半年開始接觸unity,入坑也一年多了,在這一年多的學習過程中也踩了不少的坑,最近一直在整理unity的框架,希望將之前的經驗整理出來,這個系列隨著我的不斷整理也會一直的寫下去,就當作對之前學習內容的一個整理.
由於我是一個喜歡專案規劃的程式設計師,所以基本上一些控制元件儘量不會直接掛在遊戲場景內,大多都通過程式碼來載入,當然一些資訊也喜歡以XML或Json的方式來儲存,想自己實現框架的人可以參照我的思路,按照自己的方式來完成這個框架.
關於框架
其實有很多人對框架存在一些誤解,我對與框架的理解就是他方便了對某類功能的管理,使用者只需拓展框架(繼承自框架中的基類)與使用框架(呼叫框架管理類裡提供的方法),就可以達到對這一功能的管理,例如在以後會寫到的UI框架.
關於BaseFrameWork
在BaseFrameWork裡面我存放的是所有專案都會用到的一些管理類,在之後我也會在整理UI框架(UGUI與FairyGUI)與一些專用框架(例如滑鼠指標管理框架與單機rpg的任務管理框架).
UnityPackage的目錄結構
因為最後需要把框架整體打包作為一個”輪子”來給其他專案使用,所以目錄結構就特別重要,這裡我寫好的這個框架的目錄結構如下:
- plugins下有解析json的dll檔案,這裡我使用LitJson來解析json資訊.
- Resources下的ManagerPrefab裡是對應管理類的預製體,身上掛載著對應的管理指令碼.
- Resources下的UpdateData下的Cofig裡存放著需要修改的本地資訊檔案(XML或Json)的資訊Json檔案.
- Scripts下的FrameWork裡面存放著在基礎框架裡的一些管理類,在下面的內容中會詳細介紹
框架管理類的型別資訊(ManagerType)
在Config下的ManagerType中新增擁有的管理類的列舉(本框架中有soundmanager與updatedataManager),若匯入其他具有管理類的框架,只需製作掛在管理類的預製體並新增在Resources>ManagerPrefabx下即可,系統會在開始遊戲時自動載入所有掛在管理類的預製體(GameManager類實現).
ManagerType.cs
/// <summary>
/// 管理預製體的型別
/// 可根據內容修改
/// </summary>
public enum ManagerType
{
SoundManager,//聲音管理
UpdateDataManager//本地資料更新管理
}
單例模板類(Singleton)
對於框架的管理類來說(例如 GameManager等),一般都是在系統中唯一的,所以我們可以採用單例模式來實現這個需求,但如果每個管理類都需要設計一個單例模式,會導致有大量的重複程式碼,所以我們可以抽象出一個單例基類,讓所有管理類來繼承這個基類,從而實現單例模式.
Singleton.cs
using System;
using System.Collections.Generic;
using System.Text;
using UnityEngine;
/// <summary>
/// 單例模板類
/// </summary>
/// <typeparam name="T">需要單例的型別</typeparam>
public abstract class Singleton<T> : MonoBehaviour
where T : MonoBehaviour
{
#region 資料成員
//靜態私有成員
private static T m_instance = null;
//靜態共有屬性
public static T Instance
{
get { return m_instance; }
}
#endregion
/// <summary>
/// 在Awake中完成單例模式的賦值
/// </summary>
protected virtual void Awake()
{
m_instance = this as T;
}
}
其他
在下篇部落格中,我將介紹基礎框架的兩個核心類—GameManagerM與SoundManager的實現思路.