從零開始學虛幻4遊戲開發系列21
來自專欄笨貓快樂學編程
在上一課的內容中,我們一起創建了一個隧道生成器。
而從這一課開始,我們將一起來學習設置Tunnel的藍圖。
BP_Tunnel這個藍圖將負責完成兩項任務。其中之一是檢測和確認何時遊戲需要生成一個新的Tunnel隧道。為此,我們需要創建一個trigger觸發區。一旦觸發,BP_Tunnel將通知BP_TunnelSpawner生成一個新的隧道。通過這樣,就可以製造一種假象,讓玩家覺得隧道是無窮無盡的。
而另一項任務則是確定一個生成點。這樣BP_TunnelSpawner將使用這個點作為隧道的下一個生成位置。
好了,首先讓我們來創建觸發區。
從主編輯器中打開BP_Tunnel藍圖文件,然後找到Components面板。添加一個Box Collision組件,並將其命名為TriggerZone。
默認的碰撞區很小。為此,我們需要在Details面板中找到Shape部分。將Box Extent的屬性更改為(32,500,500)。
接下來,將Location的屬性值設置為(2532,0,0)。這樣TriggerZone就會被放置在隧道紋理的最末端。也就是說只有當玩家達到前一個隧道的末端時才會生成一個新的隧道。
完成這一步之後,接下來就是創建生成點了。
創建生成點
為了定義生成點的位置,我們需要使用Scene這個component。因為它只包含一個Transform屬性,所以用Scene組件來定義位置是最合適的了。此外,這類組件在Viewport遊戲視圖中也是可見的。這樣我們就知道生成點的具體位置在哪裡。
在藍圖編輯器中找到Components面板,確保沒有選中任何東西。點擊Add Component,從而添加一個Scene類型的組件,並將其命名為SpawnPoint。
隧道紋理在X軸上的長度是2500單位,這也是連接點應該所處的位置。
在Details面板中將Location屬性更改為(2500,0,0)。
接下來我們需要創建一個函數,從而在SpawnPoint這個位置生成隧道。
在SpawnPoint生成隧道
在BP_Tunnel的藍圖編輯器工具欄上點擊Compile,然後切換到BP_TunnelSpawner。
為了讓玩家在視覺上感覺到隧道是沒有止境的,我們需要讓下一個BP_Tunnel隧道出生在最遠的隧道的SpawnPoint點上。
因為最遠的隧道永遠是最後一個生成的隧道,所以我們很容易就獲取到它的引用。
在BP_TunnelSpawner的藍圖編輯器中切換到Spawn Tunnel這個函數的視圖。
右鍵點擊Spawn Actor From Class節點的Return Value埠。選擇Promote to Variable,然後將變數更名為NewestTunnel。
這樣一來,我們就始終可以有到最遠的隧道的引用。
接下來創建一個新的函數,將其命名為SpawnTunnelAtSpawnPoint,並創建如下的連線:
通過以上設置,可以獲取最新的隧道,及其SpawnPoint的位置。接著遊戲會在這個位置生成一個新的隧道。
為了讓BP_Tunnel藍圖和BP_TunnelSpawner藍圖之間建立通訊,需要創建一個引用。否則的話BP_TunnelSpawner並不知道應該合適生成下一個隧道。
創建到隧道生成器(Tunnel Spawner)的引用
點擊工具欄上的Compile按鈕,然後關閉SpawnTunnelAtSpawnPoint這個視圖。接著切換到BP_Tunnel藍圖。
添加一個新的變數,將其命名為TunnelSpawner。將變數類型更改為BP_TunnelSpawnerObject Reference。
點擊Compile按鈕,然後再次切換回BP_TunnelSpawner藍圖。
打開SpawnTunnel視圖,並添加以下節點:
好了,現在每個隧道都有了到BP_TunnelSpawner的引用。
接下來,我們需要通知BP_TunnelSpawner,當玩家進入TriggerZone區的時候生成下一個隧道。
添加TriggerZone的相關代碼
在BP_TunnelSpawner的藍圖編輯器上點擊工具欄上的Compile按鈕,然後切換回BP_Tunnel。
在Components面板中右鍵單擊TriggerZone。選擇Add EventAddOnComponentBeginOverlap。這樣會在Event Graph中添加以下節點:
每當有另外一個角色重疊到TriggerZone上時,就會執行該節點。
首先,我們需要檢查重疊到TriggerZone的角色是否是玩家。
從Other Actor埠拖出一條線,從菜單中選擇Cast to BP_Player。
注意:因為所生成的隧道都是在之前隧道的末端,所以就會觸發隧道的TriggerZone。Cast to BP_Player可以防止其它的節點執行。
接下來,在Cast to BP_Player節點之後添加相關的節點。
讓我們解釋下所發生的一切:
1.當某個角色重疊到TriggerZone區時,就會執行On Component Begin Overlap (TriggerZone)節點。
2.Cast to BP_Player節點會檢查該角色是否是玩家角色
3.如果是玩家角色,BP_TunnelSpawner就會生成一個新的隧道。它的位置就在最後一個生成的隧道的SpawnPoint組件的位置處。
4.既然原有的隧道已經沒有作用了,遊戲就會使用DestroyActor節點來刪除之前的隧道。
點擊Compile按鈕,然後返回到主編輯器,點擊Play運行。
一旦到了前一個隧道的末端,遊戲就會自動生成一個新的隧道。
遺憾的是,雖然遊戲在不斷生成新的隧道,但是看起來卻不是無止盡的。
為此,我們需要始終保持幾個隧道可見。隨後,當我們在添加一個障礙物時,玩家就不會感覺到這些了。
好了,本課的內容就到此結束了,我們下一課再見~
推薦閱讀:
※大廠遊戲海外版出現私服用戶遭洗《劍俠情緣》等手游已中招
※如何打造細緻的2D捏臉系統
※作大死項目筆記 - 從掃描自己開始
※《說劍》Sunhead Games
※關於 ISART Digital,你想知道的都在這裡