您好,登錄后才能下訂單哦!
對于UE4來說我只是個菜鳥,研究一下網上的教程稍微嘗試的做一下demo,所以可能下面會有描述不準確或者說沒解釋清的地方請多諒解哈。也非常歡迎指出我說的不對的地方一起學習。
接下來開始教程。
UE4的原生功能LevelStreaming就非常適合用來做大地圖,這也是生存競技類游戲首選UE4來開發的原因之一。現在就稍微解釋一下UE4的大地圖實現。
對于UE4來說,Level(關卡)的概念很重要,但是為了更快的進入本文內容,我們可以把Level先當作這個大地圖世界的切片,比如一個大地圖你把它橫豎切過成9宮格,每一片就是一個Level。而LevelStreaming(流關卡)就是用來把這些Level加載進來的方案。
現在我們就來做一個demo。功能就是像下圖這樣,這個世界有兩個Level:A、B。角色從A走到B。兩個level在合適的時機加載。
因為我自己本身也剛學習,所以我的教程也盡量詳細,盡量把每個過程都照顧到。
首先我們創建一個第一人稱項目,建造這個場景
通過選擇這幾個cube復制粘貼,稍微擺放一下場景物件來把場景擴大,并且把中間的墻刪掉
如果這時候build的話會提示場景光照需要先build,并且下面會出現這個提示
所以先等這個光照build完我們可以跑來看看。
這時候需要把場景分成兩個Level,左邊是A,右邊是B。
先打開Level面板(Windows->Levels)
創建一個新Level,把Level放在和現在用的這個map同一路徑下(必須放在同一路徑,后面會講到)
同樣的方法創建LevelB。
這時候需要把當前關卡設置為LevelA
然后把場景種的所有左邊的物件選中(一個一個點...),設置為LevelA的物件
可以通過隱藏這個關卡物件的按鈕來看是否遷移正確
同樣的方法處理LevelB
這樣子處理之后,我們需要的場景就建造完成了
根據我嘗試的結果,最少有四種方法可以實現。
方法1:通過觸發器觸發你的藍圖邏輯:
首先在場景中間放置一個BoxTrigger。(先把FirstPersonExampleMap切換為當前關卡)
選中BoxTrigger,之后打開關卡藍圖
這時候可以直接右鍵生成這個觸發器的觸發事件
然后就是調用這個流程最關鍵的接口
完成之后如果這時候你點了Play的話,會自己掉落到空場景。所以需要先把LevelA先加載進來
這時候play,從LevelA走到LevelB,你就能看到能正常加載并通過
方法2:通過代碼加載
通過代碼加載就是如果你有自己的加載需求,自己在你的代碼邏輯中調用上面的加載和卸載接口。這里就不演示了
方法3:通過StreamingVolumes控制加載卸載
這個方法是,通過UE的控件LevelStreamingVolume,來判斷是否在Level顯示范圍內,是則加載,否則卸載
先把剛剛的關卡藍圖的事件流程斷開
在LevelB上放置一個完整包含LevelB的LevelStreamingVolume
打開LevelB的LevelDetails,設置VolumeB為它的StreamingVolume。
這時你就能看到,當你走過去LevelB的時候就自動加載了。當你離開就會卸載。
方法4:通過系統的場景與照相機的距離,自動加載卸載(吃雞大世界主要方法)
這個方法會比較復雜,首先需要先把這個場景中的子Level都刪掉。所以之前的demo是不能通用的。這時候我們先把剛剛的項目備份。再開始做這個。
先把子Level刪掉
打開WorldComposition功能。(Window->World Setting ->World -> EnableWorldComposition勾上)
然后你能看到你一直用的Levels面板多了一個按鈕
同時你也會發現,你的LevelA和LevelB也在里面。
這就是為什么之前說必須放在和你當前Level同一個文件夾的原因。放在同一個文件夾下的Level都會加載到這里,作為默認可能打開的level
這時候在Levels面板里雙擊這兩個level,就會把這兩個Level加載進來
這時候Play的話,你會看到兩個場景都自動加載進來了
這是因為,現在的加載距離非常遠,你兩個小Level都包含在里面
所以現在我們要加一個新layer,加載距離只有20m(20m以外卸載)
然后把LevelA和LevelB加載到Layer20M這(這里操作有點奇怪,有時候不顯示AssignToLayer這個按鈕,這個的話Unload再Load一下,瞎折騰一下就好了。。。)
這時候你在場景里走一下就能發現,超過20M的距離Layer就會卸載,在20M以內就會加載。
上面用的方法4,可以簡單拓展一下做一個距離裁剪
新建4個Level,按區域把場景中的控件分別放到對應level里
建一個新layer,加載距離為5m,把剛剛這幾個新建的level放進來
這時候Play就能看到,從LevelA走到LevelB時,會先加載LevelB的場景,再走到LevelB的物件非常近的地方,物件才會加載。
這樣子就實現了一個簡單的距離裁剪。
demo的話,因為公司上傳不方便,其實根據我上面的指示也非常清楚了,實在有需要我就上傳demo吧。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。