在學習C++的時候,對於面對對象有點了解。然后也使用過一段時間的Unity,用起來還是覺得,怎么這么好用。耦合性極低。當時不知道這是基於組件編程。所以現在來學習下基於組件的知識,並比較下基於組件和基於對象的區別。
一、面對對象
在學校,老師講授的C++,比較核心的就是“面對對象”的思想。好比編寫一個游戲,先考慮好該游戲有哪些對象,比如:玩家、敵人、道具、戰斗關卡、等
敵人和玩家都具有一些相同的屬性:血量、攻擊力、位置等。但是玩家除此之外還擁有金錢、裝備倉庫、技能。根據技能的不同,可以分為近戰的戰士 和 遠程攻擊的 法師。 玩家可以用 錢來購買裝備。裝備包含該裝備售賣的價格和裝備信息。 游戲關卡類控制戰斗過程中關卡的切換。
二、組件編程
在傳統的結構設計中一般會使用“派生”來描述對象之間的關系。子類通過派生父類,來獲得父類的功能。在設計游戲對象時,會根據游戲本身的需要而為游戲對象添加各種功能支持,比如渲染,碰撞,剛體,粒子系統等等。這些通用功能為了能夠為各種派生類提供服務,都必須實現到基類中。這樣就導致了游戲對象基類變得非常龐大臃腫,即難使用,又難維護。 ”基於組件“的對象模型就是把所有需要提供給游戲對象的基礎功能都獨立成單獨的”組件模塊“(Component),一個具體的游戲對象可以將它需要的功能模塊組合到一起使用。所有”功能“不再是父類中的接口,而變成子對象實例,為游戲對象提供服務。這樣既保證了功能代碼的可重用性,又增加了整個對象體系的模塊化和靈活度。
我的理解:Unity把最常使用、最基本的功能以一個個組件的形式提供給開發者。比如位置、音效、渲染、碰撞等。相當於開發者建造一個房子的話,Unity直接提供了磚頭、水泥、木頭、門窗這些基本的物件。開發者可以像搭積木一樣構造出一個個城堡。開發者充當的角色就是“膠水”,將一個個獨立模塊通過一定的邏輯,粘連起來,最終達到自己的項目預期目的。
三、Unity有哪些組件
Unity3D = Gameobject + Components;Unity核心思想:一切皆組件;
- Transform:物體的空間坐標、縮放、旋轉信息
- 燈光:點光源、方向光源、
- 相機
- 地形
- 粒子系統
- 屏幕特效
- 網格
- 物理引擎:重力、碰撞、剛體、射線
- 音效、視頻
- 動畫
- AI:尋路
Component
好了,這么多組件,一個個研究透了,Unity技術也相當高了。
參考:
[1]面向對象設計與分析實例 https://www.cnblogs.com/zknublx/p/6093875.html
[2]unity3d常用組件及分析 https://www.cnblogs.com/revoid/p/6553651.html