效果预览如上图:
一、预期实现的目标:
1.过热时激活一个QTE条,并且该QTE条包含蓝色、黄色、红色三部分,黄蓝条的位置和宽度随机生成
2.从QTE条的最右端开始生成一个从右向左匀速移动的指示器,速度和散热速度匹配(一个小竖棍子)
3.根据玩家按下左键的时机有4种情况:
指示器处于蓝色区域:奖励:瞬间冷却武器(清空热量条);
指示器处于黄色区域:奖励:瞬间冷却武器 + 武器在一段时间内开火不会积累任何热量;
指示器处于红色区域:惩罚:热量条重新充满,玩家只能被动地等待其散热完毕后才能开火
指示器移动到最左端:也就是玩家啥也没干,自然散热
4.武器没有过热,但有之前开火积累的热量,玩家可以等待几秒后开始被动散热。或者按r主动散热
详情参考:https://battlefront.fandom.com/wiki/Overheat
二、游戏objects的准备
1.游戏层:一个玩家(图中player)、一把武器(图中Rifle)、一个弹药(图中Bullet)
其中武器要装上官方的Firebullet插件
2.UI层:一个热量指示条HeatlevelBar(示例中我设置为200px宽)、一个热量指示条的装饰性外框、一个金色条来告知玩家可以不积累热量随意开火的剩余时间
3.UI层QTE部分:一个用来判定QTE的竖棍、一个黄色条(示例中我设置为32px宽)、一个蓝色条(32px宽)
三、Firebullet插件的拓展
根据上文 “一、预期实现的目标” 可以知道,QTE按到了红区是会惩罚玩家重新进行整个冷却的,热量条会再度爆满,但是Firebullet插件本体是没有能实现直接设置热量值的功能,这会影响我们游戏事件的编写,需要我们自己diy一个,去插件编辑页面如下图操作与设置即可
PS:我已建议Firebullet插件的作者加上这个功能了,建议已被采纳,不知道官方何时会更新。
四、开火,热量积累、被动散热和主动散热
事件表如上图,Debug部分是用来开发的时候显示武器实时的热量值大小以及是否处于QTE状态。
官方插件中,热量值最低为0最大为1,达到1的时候武器过热,无法开火。本示例中每开火1次,热量积累0.05,也就是说如果不被动散热或者主动散热,开火20次就会过热。热量冷却速度的单位是 n个热量值每秒,示例中设成0.25也就是1/4,意味着如果武器快过热了,玩家要消耗将近4秒才能主动散热完毕,不如直接射到过热,然后激活QTE来争取瞬间冷却。
这部分的要点是给武器赋予是否处于QTE状态和是否处于主动散热状态的两个变量(图中的isQTE和isVenting)
五、热量条的实时刷新与一些视觉美观上的设定
过热条的宽度=热量*200,之所以乘200是因为前面美术素材的宽度就是200px
六、过热触发QTE
武器过热后就可以根据热量条的坐标来创建QTE三件套了。
七、QTE判定
首先是蓝条和黄条的判定,用到的条件是鼠标左键按下且竖棍和蓝条/黄条发生碰撞,然后激活一个对应的计时器,计时器在指定时间内会瞬间散热,下一部分会讲。
同时,要提前在热量条的坐标,创建并隐藏一个表示武器开火不发热的黄金条,只有玩家触发黄条后才显示它,下一部分会讲。
接着是红条惩罚,注意到碰撞部分补充了两条:竖棍不能和蓝条或者黄条发生碰撞,如果不写这两条,那么由于我们之前把黄蓝条都是生成在红条上的,所以竖棍在和黄条或者蓝条碰撞时也会碰撞到红条,那最后所有判定都会变成红条惩罚了。
另外,因为热量条也是会从右往左缩短的,为了美观,热量条没有和蓝条或者黄条碰撞的时候,删去蓝条或黄条,避免蓝条黄条孤零零的悬浮在HUD上。
最后是玩家在QTE时间啥也没干,那就自然散热,热量条宽度为0的时候结束QTE状态。
八、瞬间冷却和开火无热量
综合运用计时器还有变量就能完成瞬间散热。
用黄条计时器来及时刷新黄金条的宽度,从200px随时间减少到0px
九、补充说明
1.我在视频与本文均没有解释shake object这块,简单补充一下:这是用来在过热瞬间,还有QTE的竖棍判定瞬间来让热量条和小竖棍“蹦跶”一下,提醒玩家,增强反馈。
2.大家也可以在准星和武器外观上与热量条联动,给玩家更多的反馈。星战前线2中似乎只有热量条还有音效能给玩家过热情况的反馈。
完整视频链接:https://youtu.be/HJdEzjvj2ug
暂无关于此日志的评论。