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