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