《光環 無限》的Forge模式遺憾地被延期到了9月,但是根據目前部分的洩露視頻,新的Forge模式將會包含一個低代碼(Low Code)形式的腳本編輯器,熟悉虛幻引擎的朋友可能對這種形式的代碼編輯器很熟悉。我們可以通過一段洩露的視頻來一覽這個腳本編輯器的形式,以及通過一個簡單的例子來學習如何使用這個腳本編輯器來實現一些功能。
這個洩露視頻展示《光環 無限》了Forge的武器組合特性,可以將基礎武器和另一武器的配置進行組合。
在這個視頻中,洩露者也放出了實現這些功能的代碼。這段腳本主要實現了循環切換武器。光環遊戲中玩家是雙持武器,一般只能在兩把武器之間切換。這段洩露視頻為了演示武器組合的效果,作者製作了一個循環切換多武器的機制,玩家可以通過按下“標記”鍵來切換出下一把武器,這也是本文要分析的重點。
概念
腳本圖(Script Graph):這是玩家編寫腳本的區域,可以類比其他編程語言中的“代碼文件”,Forge關卡可以存放許多個腳本圖(Script Graph),可以將處理不同功能的邏輯分到不同的腳本圖中編寫來更好地組織項目
事件(Event): 為了運行一段腳本,我們需要有一個執行腳本的契機,這個契機就是“事件”(Event)或者觸發器(Trigger)。
以“當角色受到傷害時”事件為例。在遊戲中任何一個玩家收到傷害,這個事件就會被觸發。一個事件還包含了一些數據,比如說受到傷害的玩家是誰,受到傷害的數值是多少,以及誰是攻擊者等。我們可以對觸發事件之後要執行的動作進行編程。在本文要討論的例子有一個事件:“On Player Mark”,這個事件在玩家按下標記鍵(默認為手柄Dpad-up鍵)觸發。因此這個事件包含的數據有:
- 按下標記鍵的玩家(Player)
- 標記的位置(Callout Position)
- 以及標記的目標物體列表(Target List)
除了預置的事件之外,遊戲還提供了自定義事件(On Custom Event),玩家可以在腳本中觸發一個自定義事件,在另外的多處腳本中接收處理這個事件
變量作用域:在這些圖中有幾個涉及變量獲取的節點:“Declare Number Variable”, “Get Number Variable”和“Set Number Variable”,分別對應聲明變量,獲取變量和設置變量節點。
這些這些節點中有兩個有趣的關鍵字:“Scope”和“Player”,這意味著Forge的變量系統是有作用域的概念的,目前得出的作用域有兩個:“Local”和“Global”,這裡猜測“Local”指的是在一個腳本圖(一個關卡中可以放許多個腳本圖),“Global“指的是整個關卡。如果要在兩個腳本圖中公用同一個變量就需要把變量聲明為“Global”。變量也可以聲明為一個玩家的屬性(例如“生命值”就是一個玩家的屬性)。也就是變量的作用域有三種:
- 局部(Local)
- 全局(Global)
- 玩家(Player)
腳本講解
腳本1:當玩家按下“標記”按鍵時改變玩家的weapon_index,並觸發on_next_weapon事件
在腳本1中,每個玩家中都定義了一個數值變量“weapon_index”,這個變量用來標識玩家接下來要切換到的武器編號。一個局部變量“weapon_count”用來表示可以循環切換的武器總數。這段腳本的功能是:當玩家按下“標記”鍵時,該玩家的“weapon_index”加1(若超過weapon_count就從0重新開始),表示切換到下一把武器,同時觸發一個自定義事件“on_next_weapon”,同時把觸發這個事件的玩家和這個玩家的“weapon_index”作為事件參數傳入。這裡還可以看到我們可以利用“Print Number to Killfeed”模塊來將一些信息輸出到屏幕上,是程序員們很常用的print調試大法。
Killfeed就是對局中文字廣播玩家擊殺情況的地方,可以充當調試用的輸出區域
腳本2:若符合條件,該腳本將BR+穿刺戟武器組合賦予玩家
接下來處理當“on_next_weapon”事件發生時,將對應的武器賦給玩家。洩露者採用的方式是為每一種可以切換的武器都創建了一個腳本圖,並給出了“BR+穿刺戟”的腳本圖(腳本2),其他武器的腳本圖可以以此類推創建。
在這個腳本圖種定義了一個本地變量“index”並賦值0,該變量在運行中不變,作為標識這個腳本所謂對應的武器編號。當自定義事件“on_next_weapon”發生時,這段腳本比較觸發該事件玩家的“weapon_index”是否為“index”,如果是,就賦予玩家BR+穿刺戟的武器組合(“Give Player New Weapon”節點)。
以此類推,將這些節點複製到其他腳本中,並將本地變量“index”賦值其他武器編號(2,3,4,...,weapon_count),並在“Weapon Type Combination”中配置好這個編號對應的武器。視頻中的功能就可以完成了。在這裡我們還可以看到雖然在不同武器對應的腳本中都有一個index變量,但是這個變量是一個作用域為“Local”的變量,因此不同的腳本圖中的index變量是不同的變量,不會互相干擾。至此就完成了循環切換多武器的機制。
如果有下一期的話講講如何製作一把重力槍。
視頻/圖像來源
Youtube視頻“Halo Infinite Forge scripting feature: weapon combining”
Youtube視頻“Gravity gun created in Halo Infinite Forge”