《光环 无限》Forge模式脚本编辑器前瞻:武器组合和轮询武器切换


3楼猫 发布时间:2022-06-09 09:04:17 作者:Xeon-J Language

《光环 无限》的Forge模式遗憾地被延期到了9月,但是根据目前部分的泄露视频,新的Forge模式将会包含一个低代码(Low Code)形式的脚本编辑器,熟悉虚幻引擎的朋友可能对这种形式的代码编辑器很熟悉。我们可以通过一段泄露的视频来一览这个脚本编辑器的形式,以及通过一个简单的例子来学习如何使用这个脚本编辑器来实现一些功能。
这个泄露视频展示《光环 无限》了Forge的武器组合特性,可以将基础武器和另一武器的配置进行组合。

圣堂光束+热浪

BR+穿刺戟

电浆小手枪+干扰器

穿刺戟+破坏者

热浪+九头蛇

热浪+破坏者

重力锤+能量剑

榴弹+火箭

榴弹+脉冲卡宾

圣堂光束+热浪

BR+穿刺戟

电浆小手枪+干扰器

穿刺戟+破坏者

热浪+九头蛇

热浪+破坏者

重力锤+能量剑

榴弹+火箭

榴弹+脉冲卡宾

圣堂光束+热浪

1 / 9
一些武器组合演示
在这个视频中,泄露者也放出了实现这些功能的代码。这段脚本主要实现了循环切换武器。光环游戏中玩家是双持武器,一般只能在两把武器之间切换。这段泄露视频为了演示武器组合的效果,作者制作了一个循环切换多武器的机制,玩家可以通过按下“标记”键来切换出下一把武器,这也是本文要分析的重点。
1 / 2
泄露视频中的脚本图

概念

脚本图(Script Graph):这是玩家编写脚本的区域,可以类比其他编程语言中的“代码文件”,Forge关卡可以存放许多个脚本图(Script Graph),可以将处理不同功能的逻辑分到不同的脚本图中编写来更好地组织项目
事件(Event): 为了运行一段脚本,我们需要有一个执行脚本的契机,这个契机就是“事件”(Event)或者触发器(Trigger)。
以“当角色受到伤害时”事件为例。在游戏中任何一个玩家收到伤害,这个事件就会被触发。一个事件还包含了一些数据,比如说受到伤害的玩家是谁,受到伤害的数值是多少,以及谁是攻击者等。我们可以对触发事件之后要执行的动作进行编程。在本文要讨论的例子有一个事件:“On Player Mark”,这个事件在玩家按下标记键(默认为手柄Dpad-up键)触发。因此这个事件包含的数据有:
  • 按下标记键的玩家(Player)
  • 标记的位置(Callout Position)
  • 以及标记的目标物体列表(Target List)
除了预置的事件之外,游戏还提供了自定义事件(On Custom Event),玩家可以在脚本中触发一个自定义事件,在另外的多处脚本中接收处理这个事件

"On Player Mark"事件

"On Custom Event, Global"事件

"On Player Mark"事件

"On Custom Event, Global"事件

"On Player Mark"事件

1 / 2
本文用到的两个事件节点
变量作用域:在这些图中有几个涉及变量获取的节点:“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,并触发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就是对局中文字广播玩家击杀情况的地方,可以充当调试用的输出区域

Killfeed就是对局中文字广播玩家击杀情况的地方,可以充当调试用的输出区域

脚本2:若符合条件,该脚本将BR+穿刺戟武器组合赋予玩家

脚本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”



© 2022 3楼猫 下载APP 站点地图 广告合作:asmrly666@gmail.com