实践:武器引擎
你会发现,其它文章的小标题下面,都有一句这样的概括总结,而本文没有。
因为这节是实践课。
本文会教你在大地图引擎的基础上打造武器引擎,并且在数据管理,打击感,武器动画等方面,给出一些现成的解决方案。
本文会教你制作出这样的效果:
如果你只需要了解各种枪械,也可以直接跳过,后续几篇文章会提供武器设计的思路和参考资料。
打开工程
这是一个基本的大地图枪战引擎,写好了物体和障碍底层。
记得关编译。
【WASD】移动,【R】装弹。
武器切换
接下来准备做的是鼠标滚轮换武器,主角默认拥有所有武器。
因为scratch的镜像翻转和自由翻转不可兼得,所以,在无扩展的环境下,我们得要给每个造型都做一个镜像造型。
在我的预设中,造型名后面跟一个 d 就是颠倒造型。
打开【武器】角色的造型页,这些便是接下来要处理的武器。
那么问题来了,如何对画布内容以中间为对称轴,进行镜像反转呢?
只需要拉一个长方形,超过造型的上下边缘,再整体翻转,造型整体的中轴就是画布的中轴了。
新建私有变量【造型名】。
在【武器】角色中显示私有列表【武器名】。
填入接下来会使用的武器名。
加上鼠标滚轮检测。
方向键和滚轮都会触发这个帽子的判定,所以加上蓝色的侦测,可以从中过滤掉真的方向键输入。
(“i”做前缀说明这是临时变量,提醒自己:别在其它地方读取它的值)
滚轮切换武器,滚到列表的一端会切到另一端的末尾。
再加上武器切换的广播。方便在武器切换时进行各种数据处理。
加上设定造型名。
看起来这个造型名有点多次一举,不过待会你就知道了)
什么待会?现在就搞!
新建一个变量:武器特殊造型。当造型为1时,禁用这个自动造型设定。
这样就可以容得下武器的开火,换弹造型了。
基本功能
接下来,把几个躺了半天的配置表填上,数据对应着几把枪。
接着,是实装对应的功能。
弹容量
添加用来描述当前弹药的私有列表。每把枪的弹药都占一位。
如果你的游戏包含物品栏系统,那么你需要把弹药信息存储在该“物品”里。
把开火和换弹的脚本改改,接入【当前弹药】列表。你问我为啥写的这么长,这你得问 mit 去(
【武器配置:弹药量】记录的是每把枪的弹药上限,注意别搞混了。
接入后,这个显示变量就可以废弃了,甚至这个变量都可以删掉了,因为我们用更高级的方式存储了武器的剩余弹药。
别忘了给它初始化。
每一个用来存储状态的列表,都应该初始化。同时,每一个用来存储配置的静态列表,都应该在本地备份。
镜头反馈
眼熟吗?这是我们的老朋友,向量换算xy轴长度。
它就躺在武器开火脚本的旁边,希望你没把它删了。
(给武器本体的后退可以更猛一点,这样你就不用在武器动画里画后退了)
现在,后坐力反馈就接入了。
射速与模式
下一步是接入全自动(指可以按住连射)的设置和射击间隔。
记得在程序的起始补上一个 [等待 按下鼠标 不成立]。
这只是我的某种习惯,我不希望玩家点击开始游戏的那一下,会在开始游戏后触发别的操作。
看来这个引擎没有覆盖到所有情况,因为栓动步枪还需要加上拉栓。
在开火脚本之后整一个武器操作。
拉栓动画会在后面动画部分专门讲,现在先做个虚像特效对付一下。
如果你有更好的写法,可以自己写。我这种做法比较直观,好编辑,但是有相当的压缩空间。
最后,没有人能把所有功能一次性全搞定,所以你的程序应该多留些扩展的空间。
比如这样,多用几层函数,把执行的步骤尽可能清晰地分开。
相信我,作品开发到后期,你绝对不会有胃口去读这种东西的:
武器动画
接下来是为武器添加动画。
手枪
把套筒向后滑。至于为什么,接下来的写实枪械部分会简单介绍手枪的结构。
打开洋葱皮,调成置后(behind),1层。
复制一个参考放在前面。
然后是用经典发光球做个枪口火光。
再盖上一个巨大的,比较淡的发光球当闪光。
这个球可能会让镜像造型有点难办。
不过最后的效果会告诉你,这是值得的。
接下来是空仓挂机。(子弹打光后,枪机挂在后方,提醒射手,同时方便装弹)
再给设定武器造型的地方,加上空弹就切换空挂造型的脚本。
最后的效果大概是这样的:
冲锋枪
对于自动武器的开火动画,你可能需要画两帧,否则高速重播下看起来会有点别扭。
请出我们的老朋友:参考图,洋葱皮,手枪的火光,还有开火时枪机打开。
第二帧,逐渐恢复平静,但是,没有完全恢复。
然后制作反转造型。
最后加到这里面。相信你已经预料到了,这一条会因为武器增加,而变得又臭又长。
但是用脚本写出来,是最直观,最方便修改的方式。
别忘了还有空挂造型。
栓动步枪
给大威力的武器整点更顶的火光应该不过分吧😋
除了冲锋枪那种高射速外,栓动步枪这种动作很大的,也应该多加一帧衔接。
第一个造型可以多停留一帧,因为这画面变化,大开大合的。
最后是拉栓动画:
枪栓抬起,然后往后拉。
做上脚本,顺便,最后一枪不用拉栓。因为在现实中,退出了空弹壳,换上新弹匣还是得上膛。
最终效果:
作为示例,就做这三把枪了,武器动画的工程量通常不会小。
加特林
现代的加特林机枪是一种电控的转管机枪,射速能达到每秒二三十发。
出于设备性能与平衡性考虑,大多数射击游戏里,加特林都没有这样的火力。
第一帧,后层的管子往下,前层的管子往上,转过去刚好只剩俩管了。
通过【i-开火】变量来控制两帧的开火画面交替出现。
虽然第二帧也是收尾的,但是二者交替出现,能够在保持高射速时,让武器动画更好看。
(一帧火大一帧火小,实际射速比看起来快一倍)
武器脚本进行了以下两处改动:初始化变量【i-开火】,并加了个收尾的程序,以便在松开鼠标时恢复该变量,并衔接动画。
如果松开鼠标时,最后一枪的动画是火光大的帧,那么就会有一帧火小的上来收尾,单发的时候能看起来更顺滑。
最终效果:
至于突击步枪,和冲锋枪大同小异,这里就不演示了。
<iframe
width="100%"
height="800px"
scrolling="no"
src="https://www.ccw.site/embed?id=gun-art-tutorial/mbzzw/Lec08&type=comment"
title="{mbzzw 的射击游戏工具箱 02-2}"
frameBorder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
allowFullScreen
scrolling="0"
></iframe>