By accepting you will be accessing a service provided by a third-party external to https://www.incgmedia.com/
關卡流 (Level Streaming) 指的是關卡的集合,主要是透過即時加載、卸載指定的關卡,將遊戲中的大型場景拆分成不少小關卡,每當玩家到達區域附近,即可迅速讀取周邊的場景與關卡,不須強大硬體,也能讓遊戲跑得動。而來自中國的遊戲技術美術-很久不見,將帶大家透過簡單三步驟,建立遊戲的關卡流!
本文已獲得 CG 世界授權
先來看一下最終成品
關卡流送的方式-Level Streaming Volume
關卡流送體積域 (Level Streaming Volume),主要的功能就是針對指定關卡進行開與關,簡單來說就是當玩家進入某區域時,會加載哪些關卡,當離開時會關閉哪些關卡,因此使用 UE4體積中的 Level Streaming Volume 流送子關卡,是最容易的操作,既不要求腳本編寫,也是控制關卡流送的理想方式。此外,以體積域為基底的關卡流送比起以腳本為基底的流送更容易維護,而加載系統的需求如果發生變化時,只要調整體積域的大小,即可對關卡加載/卸載行為進行修改。
假使要使用藍圖進行關卡流送,需輸入關鍵函數 Load Stream Level 和 Unload Stream Level,並指定關卡按命名加載,再使用C++進行關卡流送。
具體使用方法
首先需要將關卡手動進行拆分,以下將關卡拆分成兩個子關卡。
這裡簡易地給每個場景放入了不同的基礎模型。
然後在體積中找到「關卡流送體積 Level Streaming Volume 」並放入場景中。
在關卡詳細信息中可以對 Level Streaming Volume 進行操作。
在這裡點擊加號把剛才拖入場景中的 Level Streaming Volume 添加進來。
這裡也可以一次加載多個 Streaming Volume 。
這樣在運行的時候,就可以進行關卡之間的動態加載。
使用藍圖進行關卡流送,就不需要 Level Streaming Volume ,但是需要觸發事件去啟動關卡的流送,這可以是某個鍵盤按下的操作,也可以是某個響應去觸發。這裡我新建了兩個盒體觸發器 (Box Trigger) 來驅動關卡的流送。
在關卡藍圖中對盒體觸發器開啟了碰撞事件,並簡單做了一個關卡加載和卸載的藍圖,這裡關卡的加載、卸載,與觸發器的觸發離開,可以根據實際需求靈活操作。
運行一下看下效果。
關卡流的靈活應用
當然在實際的專案中,場景資源一定會比範例更複雜、更大量,在加載中也可能會有卡頓的情況,這裡就需要在兩個關卡加載的時做一些停頓的技巧,一般比較常見的是做一個介面的加載進度條。
這裡做一個控件藍圖(Widget Blueprint)
在介面中創建一個進度條。
做一個從 0 到 1 的進度條動畫。
下面將關卡一設為固定加載,並在關卡藍圖中做了一個觸碰到盒體觸發器後加載 2 秒進度條,並開啟關卡二的藍圖。
運行一下看效果。
當然也可以更加絲滑地使用場景中的角色攝影機進行過場動畫的播放。
運行一下看效果
實際上這裡利用了中間播放過場動畫的時間,加載了下一個關卡。
這也是在運行大型遊戲時,中間出現過場動畫的原因,一般此時都是在後台進行下一個關卡的加載。當然,將關卡流運用得當,在沙盒類游戲中玩家是感覺不到關卡加載的過程的,這也是有些人一直覺得沙盒遊戲沒有所謂的關卡,實際上這是一種錯誤的概念,只是優化體驗很友好,讓玩家沒有感覺到關卡的存在而已。
以上就是本次教學內容了,希望大家可以從中有所收穫,本次案例是「很久不見」的個人練習,如有不足之處,大家也可以一起交流學習,一起變得更強!
本文經 CG 世界 授權發布,內容僅有做字詞修改,保留作者所述內容,但不代表映CG 立場。如需轉載請聯絡原作者。