虛幻4的關(guān)卡動(dòng)態(tài)加載機(jī)制
來(lái)源:
52vr |
責(zé)任編輯:傳說(shuō)的落葉 |
發(fā)布時(shí)間: 2019-06-18 09:57 | 瀏覽量:
對(duì)于大型游戲MMORPG游戲或是3D街景(虛擬現(xiàn)實(shí))還有大型無(wú)縫地圖都需要地圖啊,關(guān)卡動(dòng)態(tài)加載的機(jī)制來(lái)達(dá)到讓用戶感覺(jué)自己一直是在漫游,而不會(huì)出現(xiàn)Loading(讀條),卡界面等情況。當(dāng)然除非是垮區(qū)域無(wú)法依靠關(guān)卡和關(guān)卡中之間的關(guān)系做處理。
UnrealEngine4 作為一個(gè)多年處于世界前矛的商業(yè)引擎,自然而然也為大家考慮到這個(gè)這種硬性需求。UnrealEngine4 中的動(dòng)態(tài)加載大概分為3種。
首先需要明確下幾點(diǎn)概念。因?yàn)樵偻瑢W(xué)們信息會(huì)等的前提下才會(huì)更有利于理解和相互交流。好了,不瞎扯了進(jìn)入正題。
1.地圖(Map):地圖這個(gè)概念在UnrealEngine4中基本上所示虛擬出來(lái)。當(dāng)然我們編譯完一個(gè)場(chǎng)景后會(huì)保存到自己的工程目錄下 如:XXXX\Content\Maps\ 保存的文件名叫做.umap。一個(gè)工程下可以有很多很多.umap文件,但是我們需要注意到,我們?cè)趩为?dú)保存場(chǎng)景時(shí)編輯器都是基于Level操作的。代碼中只有一個(gè)函數(shù)是關(guān)于地圖[UEngine::LoadMap]。 如下圖:
2.關(guān)卡(Level):關(guān)卡這個(gè)概念應(yīng)該是在UnrealEngine4最常用使用的,在UE4編輯器中還有一個(gè)單獨(dú)Levels編輯器。 如下圖:
3.世界(World):World這個(gè)概念之前在UnrealEngine3中一直跟地圖的概念差不多,World下面會(huì)有很多的Levels還有八叉樹場(chǎng)景管理器,以及一些尋路啊,對(duì)Level和Actor的管理函數(shù)。當(dāng)然現(xiàn)在也差不多,不過(guò)沒(méi)有看見八叉樹,多了一種LevelActor的類,SpawnActor中創(chuàng)建對(duì)象為"ConstructObject"之前創(chuàng)建對(duì)象另一個(gè)函數(shù)需要Outer和Owner的"DuplicationObject"。
言回正傳:UnrealEngine4引擎提了我們有三種動(dòng)態(tài)加載的方法,下面一一介紹。
一. 通過(guò)使用LevelStreamingVolume的方法:
通過(guò)Modes窗口下的Volumes找到LevelStreamingVolume,拖動(dòng)到編輯器中讓它覆蓋住同學(xué)們兩個(gè)Level,調(diào)節(jié)LevelStreamingVolume的StreamingUsage屬性(比如有加載后鎖定,加載,加載后顯示等)。
當(dāng)我們的Pawn進(jìn)入到這個(gè)LevelStreamingVolume后關(guān)卡就會(huì)對(duì)應(yīng)的加載啦。 如圖:
加載類型設(shè)置屬性圖例
二. 通過(guò)使用BluePrint的方法:
通過(guò)打開關(guān)卡的Blueprints使用藍(lán)圖完成動(dòng)態(tài)加載。那么在Blueprints中完成動(dòng)態(tài)加載我們需要用到幾個(gè)節(jié)點(diǎn)分別為 LoadStreamLevel和UnloadStreamLevel。 如圖:
LoadStreamLevel節(jié)點(diǎn)
UnloadStreamLevel節(jié)點(diǎn)
特別要注意的是LoadStreamLevel節(jié)點(diǎn)需要在MakeVisibleAfterLoad打勾,不然不會(huì)顯示的呦。第二個(gè)暴露變量ShouldBlockonLoad打上勾會(huì),不會(huì)被UnloadStreamLevel節(jié)點(diǎn)卸載(同學(xué)們自行按照需求選擇呦)。還有一定要在Leves編輯器中把修改動(dòng)態(tài)加載方法中的[總是加載]改成[藍(lán)圖]喔,不然通過(guò)Blueprints無(wú)法控制動(dòng)態(tài)加載的。
三. 通過(guò)寫代碼的方式加載
在需要切換動(dòng)態(tài)加載關(guān)卡的時(shí)候,調(diào)用[UGameplayStatics::LoadStreamLevel]函數(shù)來(lái)加載想要使用的關(guān)卡。
大概流程是創(chuàng)建一個(gè)FStreamLevelAction,這個(gè)Action回去讀暴露參數(shù)的包遍歷所有Level關(guān)系找到指定關(guān)卡,然后ActivateLevel這個(gè)關(guān)卡激活的時(shí)候會(huì)有加載或者卸載關(guān)卡。
-
分享到:
相關(guān)文章
網(wǎng)友評(píng)論
您需要登錄后才可以發(fā)帖 登錄 | 立即注冊(cè)
關(guān)閉
- 用戶名:
- 密 碼:
- 驗(yàn)證碼: 看不清? 點(diǎn)擊更換
- 忘記密碼?
全部評(píng)論:0條
推薦
熱門