最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Unity框架設(shè)計(jì):常用設(shè)計(jì)模式之工廠模式

2023-01-03 16:30 作者:博毅創(chuàng)為  | 我要投稿


工廠模式(Factory Pattern)是游戲開發(fā)中最常用的設(shè)計(jì)模式之一。這種類型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對(duì)象的最佳方式。在工廠模式中,我們?cè)趧?chuàng)建對(duì)象時(shí)不會(huì)對(duì)用戶暴露創(chuàng)建邏輯,并且是通過使用一個(gè)共同的接口來指向新創(chuàng)建的對(duì)象。

先來看一個(gè)生活中的真實(shí)的案例,某個(gè)品牌的汽車制造工廠,對(duì)外提供生產(chǎn)這個(gè)品牌的不同型號(hào)汽車的服務(wù)。外界只要下一個(gè)”汽車型號(hào)”, 工廠可以根據(jù)型號(hào)構(gòu)建出來不同型號(hào)的汽車。這樣外界不用關(guān)心工廠內(nèi)部是怎么運(yùn)作的,當(dāng)用戶需要某個(gè)型號(hào)的汽車的時(shí)候調(diào)用接口就可以了,同時(shí)內(nèi)部工廠的機(jī)制,可以任意的修改,比如增加了一個(gè)新的汽車型號(hào)的服務(wù)等。

通過上面的例子,我們來分析一下工程模式的幾個(gè)重要的元素,掌握這幾個(gè)元素,你就可以非常方便的在你的游戲項(xiàng)目中使用工廠模式。

首先是要定義和規(guī)劃我們工廠模式創(chuàng)建出來的對(duì)象,我們可以成為”工廠元素”。這些工廠元素都屬于不同的類型(上面例子中的不同型號(hào)的某品牌汽車),這些類型都屬于同一個(gè)基類(某品牌汽車,具有汽車的通用功能)。所以工廠元素的設(shè)計(jì)規(guī)劃就是 基類+子類的模式,基類提供對(duì)外使用的接口(如汽車的功能), 而子類定義具體的不同的類型。如果要新增一種類型,那么只要繼承自這個(gè)基類就可以了。

工廠元素設(shè)計(jì)好了以后,接下來就是提供一個(gè)”工廠構(gòu)造接口”來構(gòu)造不同的類型的實(shí)例,一般我們會(huì)提供一個(gè) Create的接口,用戶傳遞一個(gè)標(biāo)識(shí)類型的參數(shù),Create里面根據(jù)用戶傳遞的類型來new 不同的子類實(shí)例,返回一個(gè)基類的引用, 讓基類指向子類的實(shí)例。如圖:

?

用戶就可以基于基類來管理子類的實(shí)例。當(dāng)我們新加一種類型的時(shí)候,只要繼承自基類,然后在Create接口加一個(gè)類型來構(gòu)造這個(gè)新類的實(shí)例就可以了。

?

介紹完工廠模式后,相信大家對(duì)工廠模式已經(jīng)有所了解了,接下來我們來通過地圖上戰(zhàn)斗單元的設(shè)計(jì)來講解一下我們整個(gè)戰(zhàn)斗系統(tǒng)中使用工廠模式來處理敵人小怪。

步驟1:定義一個(gè)怪物的基類:

class BaseEnemy extends MonoBehaviour { //攻擊接口 // end // 行走接口 // end …. }

步驟2: 定義具體戰(zhàn)斗單元的子類FlyEnemy, MonestEnemy , 重載實(shí)現(xiàn)具體的接口

class FlyEnemy extends Enemy { // … } class MonestEnemy extends Enemy { // … }

步驟3: 編寫一個(gè)工廠模式的Create接口

class EnemyFactory { ?public static BaseEnemy AddEnemyComponent(GameObject obj, int enmeyType) { ? ?switch(enemyType) { ? ? ?case eFlyEnemy: ? ? ?return obj.AddComponent<FlyEnmey>(); ? ? ?break; ? ? ?case eMonestEnemy: ? ? ?return obj.AddComponent<MonestEnemy> (); ? ? ?break; ? ?… ? ?} ?} }

?

步驟4: 根據(jù)Excel表格描述與地圖數(shù)據(jù)來生成敵人。

敵人類型描述表,如圖:

地圖數(shù)據(jù)描述表,如圖:

我們編寫地圖管理代碼,讀取地圖表格,讀取到地圖上怪物的類型,資源路徑,位置,縮放,旋轉(zhuǎn),然后我們根據(jù)描述來在地圖上創(chuàng)建怪物,代碼如下:

GameObject obj = GameObject.Instantiate(資源路徑對(duì)應(yīng)的預(yù)制體);

obj.transform.position = new Vector3(配置表讀取的位置);

// 通過工廠模式把敵人構(gòu)建出來

BaseEenemy enemy = EnemyFactory.AddEnemyComponent(obj, 配置表讀取的type);

?

這樣我們就把地圖上的不同的敵人都構(gòu)建與創(chuàng)建出來了,如果有新的敵人,這邊的邏輯都不用改,只要加一種類型,加一個(gè)子類就可以了。這就是工廠模式在游戲中的設(shè)計(jì),很有用,大家要多多體會(huì)實(shí)踐。

?

今天的分享就到這里了,關(guān)注我,可以獲得更多的技巧。

附:視頻教

https://www.bycwedu.com/promotion_channels/2146264125?



Unity框架設(shè)計(jì):常用設(shè)計(jì)模式之工廠模式的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
阳谷县| 平舆县| 安西县| 婺源县| 信丰县| 长宁县| 云安县| 福安市| 巴彦淖尔市| 安多县| 天门市| 普兰店市| 黔江区| 永修县| 启东市| 财经| 慈利县| 木兰县| 酒泉市| 伊金霍洛旗| 集安市| 拉萨市| 扎囊县| 合肥市| 黄陵县| 星子县| 敦煌市| 博湖县| 奉新县| 咸阳市| 青冈县| 始兴县| 皮山县| 河北省| 裕民县| 伊川县| 杭锦后旗| 齐河县| 布拖县| 阳新县| 湘潭县|