引言
上文談到Actor和Component的關(guān)系,UE利用Actor的概念組成一片游戲?qū)ο笊?,并利用Component組裝擴展Actor的能力,讓世界里擁有了形形色色的Actor們,擁有了自由表達(dá)3D世界的能力。
那么,這些Actor們,到底是怎么組織起來的呢?
既然提到了世界,我們的直覺反應(yīng)是采用一個"World"對象來包容所有的Actor們。但是當(dāng)游戲的虛擬世界非常巨大時,這種方式就捉襟見肘了。首先,目前雖然PC的性能日益強大,但是依然內(nèi)存也限制了不能一下子加載進(jìn)所有的游戲資源;其次,因為玩家的活動和可見范圍有限,為了最優(yōu)性能,把即使是很遠(yuǎn)的跟玩家無關(guān)的對象也考慮進(jìn)來也明顯是不明智的。所以我們需要一種更細(xì)粒度的概念來劃分世界。
不同的游戲引擎?zhèn)?,看待這個過程的角度和理念也不一樣。Cocos2dx會認(rèn)為游戲世界是由Scene組成的,Scene再由一個個Layer層疊表現(xiàn),然后再有一個Director來導(dǎo)演整個游戲。Unity覺得世界也是由Scene組成的,然后一個Application來扮演上帝來LoadLevel,后來換成了SceneManager。其他的,有的會稱為關(guān)卡(Level)或地圖(map)等等。而UE中把這種拆分叫做關(guān)卡(Level),由一個或多個Level組成一個World。
不要覺得這種劃分好像很隨意,只是個名字不同而已。實際上一個游戲引擎的“世界觀”關(guān)系到了一整串后續(xù)的內(nèi)容組織,玩家的管理,世界的生成,變換和毀滅。游戲引擎內(nèi)部的資源的加載釋放也往往都是和這種劃分(Level)綁定在一起的。
Level
在UE的世界中,我們之前已經(jīng)有了空氣(C++),土壤(UObject),物件(Actor)。而現(xiàn)在UE又施展神力創(chuàng)建了一片片大陸(Level),在這片大陸上(.map文件),Actor們秩序井然,各種地形拔地而起,植被繁茂,天空霧云繚繞,圣光普照,這也是玩家們降生開始精彩冒險的地方。
可以從ULevel的前綴U看出來Level(大陸)也確實是繼承于UObject(土壤)的。那既然同屬于Object下面的各Actor們都擁有了一定的智能能力(支持藍(lán)圖腳本),Level自然也得體現(xiàn)出大地的意志,所以默認(rèn)帶了一個土地公(ALevelScriptActor),允許我們在關(guān)卡里編寫腳本,可以對本關(guān)卡里的所有Actor通過名字呼之則來,關(guān)卡藍(lán)圖實際上就代表著該片大陸上的運行規(guī)則。
在Level已經(jīng)有了管理者之后,一開始大家都挺滿意,但漸漸的就發(fā)現(xiàn),好像各個Level需要的功能好像都差不多,都是修改一下光照,物理等一些屬性。所以為了方便起見,UE便給每一個Level