欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Unity游戲開發(fā)中必備的設計模式之外觀模式詳解

 更新時間:2023年05月06日 09:47:24   作者:iukam  
外觀模式是一種結構型設計模式,為復雜系統(tǒng)提供了簡單的接口,使得子系統(tǒng)間的通信更加簡潔和易于維護。在Unity游戲開發(fā)中,外觀模式可以幫助開發(fā)者更好地管理游戲對象和組件等復雜結構

一、外觀模式定義

外觀模式(Facade)在GoF中的解釋:為子系統(tǒng)定義一組統(tǒng)一的接口,這個高級接口會讓子系統(tǒng)更容易被使用。

所以,外觀模式的重點在于,它能夠將系統(tǒng)內(nèi)部的互動細節(jié)隱藏起來,并提供一個簡單方便的接口。

二、外觀模式說明

示意圖表示:整合子系統(tǒng)并提供一個高級的界面讓客戶端使用。

其中的參與者具體說明:

client(客戶端、用戶)

從原本需要操作多個子系統(tǒng)改為只需要面對一個整合后的界面。

subSystem(子系統(tǒng))

原本會由不同的客戶端(非同一系統(tǒng)相關)來操作,改為只會由內(nèi)部系統(tǒng)之間交互使用。

Facade(統(tǒng)一對外的界面)

整合所有子系統(tǒng)的接口及功能,并提供高級界面(或接口)供客戶端使用。

接受客戶端的信息后,將信息傳送給負責的子系統(tǒng)。

具體來說,外觀模式可以讓客戶端使用簡單的界面來操作一個復雜的系統(tǒng),并且減少客戶端要與之互動的系統(tǒng)數(shù)量,讓客戶端能夠專心處理與本身有關的事情。

三、實現(xiàn)游戲主程序

1、游戲主架構設計

2、實現(xiàn)說明

子系統(tǒng)對外接口類 - PBaseDefenseGame

/// <summary>
/// Describe:整合所有子系統(tǒng)的接口及功能
/// </summary>
public class PBaseDefenseGame
{
	//使用單例
	private static PBaseDefenseGame _instance;
	public static PBaseDefenseGame Instance
	{
		get
		{
			if (_instance == null)			
				_instance = new PBaseDefenseGame();
			return _instance;
		}
	}
	//場景狀態(tài)
	private bool m_bGameOver = false;
    //游戲系統(tǒng)
    private GameEventSystem m_GameEventSystem;
    private CampSystem m_CampSystem;
    private StageSystem m_StageSystem;
    /// <summary>
    /// 初始化
    /// </summary>
    public void Initinal()
    {
    	m_bGameOver = false;
        //游戲系統(tǒng)
        m_GameEventSystem = new GameEventSystem(this);
        m_CampSystem = new CampSystem(this);
        m_StageSystem = new StageSystem(this);
        //...
    }
    //釋放系統(tǒng)游戲
	public void Release()
	{
		// 游戲系統(tǒng)
		m_GameEventSystem.Release();
		m_CampSystem.Release();
		m_StageSystem.Release();
		m_CharacterSystem.Release();
		//...
	}
    /// <summary>
    /// 更新
    /// </summary>
    public void Update()
    {
        //游戲系統(tǒng)更新
        m_GameEventSystem.Update();
        m_CampSystem.Update();
        m_StageSystem.Update();
        //...
    }
    //游戲狀態(tài)
    public bool ThisGameIsOver()
    {
        return m_bGameOver;
    }
    //...
}

戰(zhàn)斗狀態(tài)類調(diào)用Facade接口

/// <summary>
/// Describe:戰(zhàn)斗場景
/// </summary>
public class BattleState : ISceneState
{
	public BattleState(SceneStateController Controller) : base(Controller)
	{
		this.StateName = "BattleState";
	}
	// 開始
	public override void StateBegin()
	{
		PBaseDefenseGame.Instance.Initinal();
	}
	// 結束
	public override void StateEnd()
	{
		PBaseDefenseGame.Instance.Release();
	}
	// 更新
	public override void StateUpdate()
	{
		// 游戲更新
		PBaseDefenseGame.Instance.Update();
		// Render由Unity負責
		// 游戲是否結束
		//if (PBaseDefenseGame.Instance.ThisGameIsOver())
		//m_Controller.SetState(new MainMenuState(m_Controller), "MainMenuScene");
	}
}

3、使用外觀模式的優(yōu)點

上述示例中可體現(xiàn):

1、將戰(zhàn)斗狀態(tài)類BattleState單一化,讓該類只負責游戲在“戰(zhàn)斗狀態(tài)”下的功能執(zhí)行及狀態(tài)切換,不用負責串接各個游戲系統(tǒng)的初始化和功能調(diào)用。

2、使戰(zhàn)斗狀態(tài)類BattleState減少了不必要的類引用即功能整合,因此增加了BattleState類被重復使用的機會。

如果外觀模式運用得當還具有以下優(yōu)點:

節(jié)省時間

比如:Unity組件接口(物理、渲染,UI,粒子等)是使用Facade接口,通過面板公開參數(shù),可通過調(diào)整相關參數(shù)數(shù)據(jù)可以輕易得到反饋效果。

易于分工開發(fā)

比如,在工作分工配合上,開發(fā)者只需要了解對方負責系統(tǒng)的Facade接口,不必深入了解其中運作方式。

增加系統(tǒng)的安全性

這里安全性是指系統(tǒng)執(zhí)行時“意外宕機或者出錯”的情況。比如,一個功能先通知A去做后通知B做,一旦順序出錯會讓系統(tǒng)初始化失敗或導致宕機,所以需要Facade接口類來完成,不應該有客戶端去做。

四、結論

將復雜的子系統(tǒng)溝通交給單一的一個類負責,并提供單一界面給客戶端使用,使客戶減少對系統(tǒng)的耦合度使外觀模式(Facade)的優(yōu)點。

到此這篇關于Unity游戲開發(fā)中必備的設計模式之外觀模式詳解的文章就介紹到這了,更多相關Unity外觀模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C#雙緩沖技術實例詳解

    C#雙緩沖技術實例詳解

    這篇文章主要介紹了C#雙緩沖技術,結合實例形式較為詳細的分析了C#雙緩沖的功能,實現(xiàn)技巧與相關注意事項,需要的朋友可以參考下
    2016-02-02
  • C#生成MD5的函數(shù)代碼

    C#生成MD5的函數(shù)代碼

    這篇文章主要介紹了C#生成MD5的函數(shù)代碼,有需要的朋友可以參考一下
    2013-12-12
  • c#使用FreeSql生產(chǎn)環(huán)境時自動升級備份數(shù)據(jù)庫

    c#使用FreeSql生產(chǎn)環(huán)境時自動升級備份數(shù)據(jù)庫

    使用FreeSql,包含所有的ORM數(shù)據(jù)庫,都會存在這樣的問題。在codefirst模式下,根據(jù)代碼自動更新數(shù)據(jù)庫,都建議不要在生產(chǎn)環(huán)境使用。因為容易丟失數(shù)據(jù),本文提供一種自動更新數(shù)據(jù)庫的解決的思路:在判斷需要升級時,才自動升級,同時升級前先備份數(shù)據(jù)庫
    2021-06-06
  • C# 如何使用OpcUaHelper讀寫OPC服務器

    C# 如何使用OpcUaHelper讀寫OPC服務器

    這篇文章給大家介紹C# 如何使用OpcUaHelper讀寫OPC服務器,本文通過圖文實例代碼相結合給大家介紹的非常詳細,需要的朋友參考下吧
    2023-12-12
  • Url相對路徑的問題總結

    Url相對路徑的問題總結

    很多時候,我們在圖片或者其他(a標簽,flash)中指定鏈接的時候,我們需要選擇是使用絕對路徑,或者是相對路徑.
    2012-11-11
  • C#設置自定義文件圖標實現(xiàn)雙擊啟動(修改注冊表)

    C#設置自定義文件圖標實現(xiàn)雙擊啟動(修改注冊表)

    這篇文章介紹的是利用C#設置自定義文件圖標,然后實現(xiàn)雙擊啟動的功能,文章給出了示例代碼,介紹的很詳細,有需要的可以參考借鑒。
    2016-08-08
  • C#實現(xiàn)路由器斷開連接,更改公網(wǎng)ip的實例代碼

    C#實現(xiàn)路由器斷開連接,更改公網(wǎng)ip的實例代碼

    C#實現(xiàn)路由器斷開連接,更改公網(wǎng)ip的實例代碼,需要的朋友可以參考一下
    2013-05-05
  • C#實現(xiàn)倒計時關閉提示框功能

    C#實現(xiàn)倒計時關閉提示框功能

    最近小編接到一個功能需要實現(xiàn)一個提示框并且能自動關閉的,看到這個需求真是懵了,四處搜集資料才搞定,接下來通過本文給大家分享C#實現(xiàn)倒計時關閉提示框功能,感興趣的朋友跟隨小編一起看看吧
    2019-07-07
  • unity shader 較完整光照(含有多光源陰影)

    unity shader 較完整光照(含有多光源陰影)

    這篇文章主要介紹了unity shader 較完整光照(含有多光源陰影),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • C#實現(xiàn)在線點餐系統(tǒng)

    C#實現(xiàn)在線點餐系統(tǒng)

    這篇文章主要為大家詳細介紹了C#實現(xiàn)在線點餐系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11

最新評論