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