[Unity][理解篇]基于組件的對象模型

#Unity中最重要的一個(gè)概念就是組件涉兽,在Unity中--萬物皆組件

在傳統(tǒng)的設(shè)計(jì)中招驴,我們一般會(huì)使用“派生”來描述對象之間的關(guān)系。子類通過派生父類枷畏,來獲得父類的功能别厘。在設(shè)計(jì)游戲?qū)ο髸r(shí),會(huì)根據(jù)游戲本身的需要而為游戲?qū)ο筇砑痈鞣N功能支持拥诡,比如渲染触趴,碰撞,剛體渴肉,粒子系統(tǒng)等等冗懦。這些通用功能為了能夠?yàn)楦鞣N派生類提供服務(wù),都必須實(shí)現(xiàn)到基類中仇祭。這樣就導(dǎo)致了游戲?qū)ο蠡愖兊梅浅}嫶笥纺[批狐,即難使用,又難維護(hù)。

OOP的繼承思想


圖1.png
上圖1的整個(gè)關(guān)系變成了
  • Player is a A
  • Player is a B
  • Player is a C

舉個(gè)實(shí)際的例子:一個(gè)靜態(tài)的敵人嚣艇,并不能夠很好地通過繼承實(shí)現(xiàn)出來承冰。

繼承.jpg

#那么到底什么是“基于組件”的對象模型?它又能夠解決什么問題食零?

”基于組件“的對象模型就是把所有需要提供給游戲?qū)ο蟮幕A(chǔ)功能都獨(dú)立成單獨(dú)的組件模塊(Component)困乒,一個(gè)具體的游戲?qū)ο罂梢詫⑺枰墓δ苣K組合到一起使用。所有”功能“不再是父類中的接口贰谣,而變成子對象實(shí)例娜搂,為游戲?qū)ο筇峁┓?wù)。這樣既保證了功能代碼的可重用性吱抚,又增加了整個(gè)對象體系的模塊化和靈活度百宇。

OOP的組合思想


圖2.png
相比圖1,圖2的關(guān)系更加合理

Player have a A
Player have a B
Player have a C

還是同樣的案例秘豹,用組合的思想來實(shí)現(xiàn)(如下圖)携御,相比繼承的方式,更加靈活既绕,耦合度也更低

組合.jpg

#組件模型在UNITY中是如何運(yùn)用的

另外啄刹,在Unity中,GameObject除了作為Component的容器之外凄贩,基本上沒有其他功能誓军。所有需要的功能都要通過組合Component來實(shí)現(xiàn)。腳本本身也是Component疲扎,用來在GameObject上通過控制其他Component來實(shí)現(xiàn)自定義的功能昵时。雖然這些Component在物理上是完全并列的關(guān)系,但是他們之間還是會(huì)有一定的層次關(guān)系的椒丧。在設(shè)計(jì)一個(gè)游戲?qū)ο蟮木唧w功能時(shí)壹甥,組件一般會(huì)被分為三個(gè)層次。

  • 引擎的基礎(chǔ)組件

Unity本身提供的各種內(nèi)部功能組件瓜挽。比如渲染組件盹廷,物理組件,聲音組件等等久橙。這些組件實(shí)現(xiàn)了所有引擎提供的基礎(chǔ)功能俄占,會(huì)被腳本使用來組合高級功能。

  • 模塊功能腳本組件

通過腳本實(shí)現(xiàn)的一些相對獨(dú)立的通用模塊功能的組件淆衷。這類組件的設(shè)計(jì)是腳本可重用的關(guān)鍵缸榄,需要仔細(xì)分析游戲?qū)ο笾心男┕δ芸梢员华?dú)立出來成為一個(gè)可重用的功能模塊組件,并且在實(shí)現(xiàn)上應(yīng)該盡量降低與其他組件的耦合性祝拯。

  • 實(shí)體

實(shí)體在代碼上就是一個(gè)組件的列表甚带。由于實(shí)體的結(jié)構(gòu)實(shí)在是太簡單了她肯,所以很多實(shí)現(xiàn)都沒有專門的設(shè)計(jì)一個(gè)實(shí)體的數(shù)據(jù)結(jié)構(gòu)。相反的鹰贵,一個(gè)實(shí)體就是一個(gè)ID晴氨,所有組成這個(gè)實(shí)體的組件將會(huì)被這個(gè)ID給標(biāo)記,從而明確的知道哪些組件是屬于哪個(gè)實(shí)體的碉输。如果你想的話籽前,你可以在運(yùn)行時(shí),動(dòng)態(tài)的將組件從實(shí)體中移除或者增加一個(gè)或多個(gè)你感興趣的組件敷钾。比如說枝哄,如果玩家發(fā)出了一個(gè)冰系魔法,將敵人凍住阻荒,你只要簡單的將它的速度組件移除挠锥,那么敵人就靜止住了。

引申到樓主最近項(xiàng)目里的CharacterBase類侨赡,是以面向?qū)ο蟮乃枷雭碓O(shè)計(jì)的蓖租,隨著屬性和方法越來越多,這個(gè)類變的難以維護(hù)辆毡,如果以組件的思想來重新設(shè)計(jì)菜秦,血量甜害、位置舶掖、碰撞等等都拎出來做為基礎(chǔ)組件,而一個(gè)對象只是通過組合基礎(chǔ)組件來實(shí)現(xiàn)的尔店,這樣結(jié)構(gòu)會(huì)更加清晰眨攘,而且要生成一個(gè)擁有其他特性的對象也很簡單,再掛載一特性組件即可嚣州。

總結(jié):

如果你接觸過《軟件架構(gòu)》的編程思想就會(huì)知道鲫售,UNITY的組件模型其實(shí)遵循的就是優(yōu)秀設(shè)計(jì)的準(zhǔn)則:“組合優(yōu)于繼承”

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市该肴,隨后出現(xiàn)的幾起案子情竹,更是在濱河造成了極大的恐慌,老刑警劉巖匀哄,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件秦效,死亡現(xiàn)場離奇詭異,居然都是意外死亡涎嚼,警方通過查閱死者的電腦和手機(jī)阱州,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來法梯,“玉大人苔货,你說我怎么就攤上這事。” “怎么了夜惭?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵姻灶,是天一觀的道長。 經(jīng)常有香客問我诈茧,道長木蹬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任若皱,我火速辦了婚禮乾胶,結(jié)果婚禮上构舟,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好蜘渣,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著哑姚,像睡著了一般焙格。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上惫皱,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天像樊,我揣著相機(jī)與錄音,去河邊找鬼旅敷。 笑死生棍,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的媳谁。 我是一名探鬼主播涂滴,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼晴音!你這毒婦竟也來了柔纵?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤锤躁,失蹤者是張志新(化名)和其女友劉穎搁料,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體系羞,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡郭计,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了觉啊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拣宏。...
    茶點(diǎn)故事閱讀 39,981評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖杠人,靈堂內(nèi)的尸體忽然破棺而出勋乾,到底是詐尸還是另有隱情宋下,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布辑莫,位于F島的核電站学歧,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏各吨。R本人自食惡果不足惜枝笨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望揭蜒。 院中可真熱鬧横浑,春花似錦、人聲如沸屉更。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瑰谜。三九已至欺冀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間萨脑,已是汗流浹背隐轩。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留渤早,地道東北人职车。 一個(gè)月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像蛛芥,于是被迫代替她去往敵國和親提鸟。 傳聞我的和親對象是個(gè)殘疾皇子军援,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,138評論 25 707
  • 1 場景問題# 1.1 商品類別樹## 考慮這樣一個(gè)實(shí)際的應(yīng)用:管理商品類別樹仅淑。 在實(shí)現(xiàn)跟商品有關(guān)的應(yīng)用系統(tǒng)的時(shí)候...
    七寸知架構(gòu)閱讀 6,014評論 10 59
  • OOA:Object-Oriented Analysis面向?qū)ο蠓治龇椒?是在一個(gè)系統(tǒng)的開發(fā)過程中進(jìn)行了系統(tǒng)業(yè)務(wù)調(diào)...
    楚易楓閱讀 3,667評論 0 5
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法空厌,類相關(guān)的語法庐船,內(nèi)部類的語法,繼承相關(guān)的語法嘲更,異常的語法筐钟,線程的語...
    子非魚_t_閱讀 31,631評論 18 399
  • 這種女人像林黛玉篓冲,又比林黛玉要強(qiáng)!她們天生長著一副讓人心疼的模樣李破。你看了之后會(huì)心動(dòng),久了之后會(huì)情動(dòng)壹将∴凸ィ看到她總是那么...
    54譚小姐閱讀 1,294評論 0 1