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

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

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

2021-11-23 22:04 作者:博毅創(chuàng)為  | 我要投稿

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

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

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

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

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

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

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

步驟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ù)來(lái)生成敵人。

敵人類型描述表,如圖:

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

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

GameObject obj = GameObject.Instantiate(資源路徑對(duì)應(yīng)的預(yù)制體); obj.transform.position = new Vector3(配置表讀取的位置); … // 通過(guò)工廠模式把敵人構(gòu)建出來(lái) BaseEenemy enemy = EnemyFactory.AddEnemyComponent(obj, 配置表讀取的type);

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

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

更多教學(xué)資料:https://bycwedu.vipwan.cn/promotion_channels/829468798? ?

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

分享到微博請(qǐng)遵守國(guó)家法律
洞口县| 苏尼特左旗| 雅江县| 郯城县| 济宁市| 尼玛县| 莫力| 城固县| 紫云| 旺苍县| 株洲县| 府谷县| 永川市| 隆回县| 罗源县| 宁德市| 曲麻莱县| 乌兰浩特市| 当涂县| 富源县| 香河县| 迁西县| 泊头市| 竹北市| 台湾省| 波密县| 安阳市| 游戏| 彰化市| 边坝县| 普兰店市| 科技| 永泰县| 瑞丽市| 库尔勒市| 玉门市| 临桂县| 犍为县| 大方县| 长垣县| 子洲县|