《我的战舰》自瞄的前世今生

精华更新时间2019/7/172021 浏览游戏开发攻略
大家好,我是猫猫。今天咱来唠唠自瞄。熟悉游戏的玩友对自瞄应该不陌生了。相关的论坛上也有很多自瞄教程。
可总有萌新纳闷,为什么我的自瞄炮总是指不准?为什么自瞄那么的缓慢?为什么抖动那么厉害?而大佬们的自瞄既快又准,还稳的雅皮。这是为什么呢?
今天猫猫就来梳理一下猫猫所知道的自瞄。
第一种:上古自瞄
上古自瞄是代码功能出现后的第一种自瞄。
TapTap
点击一个激光瞄准器,可以看到它外围有+X,-X,Y+,Y-共计四个方向。
然后我们像这样放两个主动转轴(或者主动铰链),让转轴1控制激光瞄准器可以在+X,-X方向转动。让转轴2控制激光瞄准器可以在Y+,Y-方向转动。
主体结构放置完成,咱开始准备写代码。
先观察一下主动转轴的旋转方向。
TapTap
TapTap
默认状态下,主动转轴是逆时针旋转。把转轴力量改为负数后,主动转轴是顺时针旋转。
主动转轴的转动有三种模式,相对每秒,绝对,相对(无视帧率)
这里最好采用相对每秒模式。
点击激光,打开激光的代码页面。左下方四个绿框。
TapTap
-X方向有敌人:主动转轴1,转动-0.2,相对每秒
+X方向有敌人:主动转轴1,转动0.2,相对每秒
Y方向有敌人:主动转轴2,转动-0.2,相对每秒
-Y方向有敌人:主动转轴2,转动0.2,相对每秒
好了,完成!
总结评价一下:这种自瞄最大的优点在于简单,容易理解。但主要的缺点在于抖动很大。反应速度一般。如果想降低抖动,必须转动速度,但转动速度低,反应就会更慢。
有没有鱼和熊掌兼得的方法呢?答案是,有!
第二种:分段式自瞄
自瞄的目的在于让激光的向前方向指目标。即激光的向前方向与激光到目标的射线重合。
我们定义一个目标夹角,即激光的向前方向与激光到目标的射线方向夹角。
当夹角比较大时,转动速度比较大。
当夹角比较小时,转动速度比较小。
当夹角为零,转动速度为零。
这是分段式自瞄的设计思路。
然后咱开始动手算角度。
激光的向前方向(向量):激光的局部坐标转世界坐标(0.0.1)
激光到目标的射线方向(向量):向量减法,目标坐标-激光坐标
夹角(小数):向量夹角,激光的向前方向(向量)与激光到目标的射线方向(向量)
算完角度以后,开始写分段。
如果 夹角>90,转动速度(小数)=0.5
如果 90>夹角>60,转动速度(小数)=0.2
如果 60>夹角>20,转动速度(小数)=0.1
如果 20>夹角>5,转动速度(小数)=0.05
如果 5>夹角>0,转动速度(小数)=0.02
需要用到一些逻辑运算,简单了解一下“或”“与”“非”。
TapTap
TapTap
TapTap
总结评价一下:分段式自瞄精确度很高,速度也可以。缺点是调整过程很繁琐,需要多次试验才能找到最合适的一组分段数据。
有没有精确度高,速度快,无需调整数据的自瞄呢?答案是,有!
第三种:瞬瞄
如果前两种还算基础的话,到瞬秒这里就有了不小的提升。上了一个台阶,层次。玩友们在设计瞬秒时八仙过海,各显神通。但无论哪种方法,殊路同归,核心还是在于算角度。但这个角度不再是分段式自瞄里简单的夹角,而是空间方位角
TapTap
我们要求的空间方位角是
模式一∠BOZ和∠BOM
或者
模式二∠AOZ和∠AOM
需要强调的是方位角有正负,在算角度时一定别忘了判断正负。
这里写一下用向量的办法来算∠BOZ和∠BOM
向量OM=目标坐标-激光坐标
向量OM的x
向量OM的y
向量OM的z
向量OB(0,向量OM的y,向量OM的z)
向量OX(1,0,0)
向量OY(0,1,0)
向量OZ(0,0,1)
∠BOZ:向量夹角,向量OB与向量OZ
∠BOM:向量夹角,向量OB与向量OM
角1:向量夹角,向量OB与向量OY
角2:向量夹角,向量OM与向量OX
如果 角1>90 则∠BOZ=-∠BOZ
如果 角2>90 则∠BOM=-∠BOM
用三角函数的办法同样可以计算出角度。
下一步是把角度填进转轴。
两个转轴的位置需要稍微调节一下。让激光处于它们旋转轴的交汇点。
TapTap
这样做的好处是让转动更加的精确。
转轴采用绝对转动办法。完成!
需要提的一点是,转轴的角度范围,转动角度都是-1到1的比例值。所以算出角度后不要忘了划算成比例。
第四种:万向轴瞬瞄
角度计算与上面相同。
这里重点说的是万向轴独特的指向原理。
万向轴的方向控制是一个向量(x,y,0)
TapTap
很多人以为x是水平面的角度比例,y是竖直面上的角度比例。
但实际不是这样的。
TapTap
这样放置的万向轴,如果想指到目标M。
x是∠BOM的角度比例,y是∠BOZ的角度比例。
如果你之前算的角度是模式二∠AOZ和∠AOM,那么你就要把万向轴旋转90度,然后再判断一下角度正负了,挺绕的是吧。
第五种:空间瞬瞄
三,四瞬瞄用的都是世界坐标系,炮台底座需要固定在地面上。
但是如果想把瞬瞄系统搬上飞机,母舰怎么办?有没有解决办法?
有!
办法就是在炮台底座引进局部坐标系,不再依靠世界坐标系。
猫猫比较喜欢用激光瞄准器的局部坐标系,因为它的坐标轴最容易判断。
名字就叫“激光2坐标系”吧。前面的那个指向敌人的的激光命名为“激光1旋转点”。
局部坐标系有三个基准方向(1,0,0)(0,1,0)(0,0,1)一般称为正X轴方向,正Y轴方向,正Z轴方向。
TapTap
就激光瞄准器而言,(1,0,0)是-X在的方向,(0,1,0)是Y-所在的方向,(0,0,1)是激光的指向。(并不知道为什么这样,但游戏里就是这样定义的。)
首先把三个向量:目标坐标,“激光1旋转点”坐标,“激光1旋转点”向前方向,转换到局部坐标系。
依次使用 “激光2坐标系”激光,世界坐标转局部坐标()功能。
然后在新的坐标下,计算空间方位角。重复上面的步骤
总结:
猫猫这里一共介绍了五种自瞄。认真比较一下,前两种算一类,后三种算一类。功能一步步改进和升级,结构和代码也越来越复杂化。
整体来说分段式自瞄较为稳健,准确度速度尚可,而且不依赖坐标系,可以随意放置。瞬秒有不小的门槛,需要点时间研究。当然如果全部掌握的话,空间自瞄当然是最好的选择。
自瞄的发展,来自于玩家的奇思妙想,至于还有没有像这样的其他黑科技?当然是有的啦,只是功能比较琐碎,不像自瞄这样明确。猫猫有空介绍一点知道的。
#END
Ps:现在的游戏上存在着一些玩家拿着买来的素质武器到处欺负萌新的现象,这是不好的。趾高气扬的背后是羸弱自卑的内心,像缺爱的孩子,四处叫嚷着博取关注。是争强好胜还是飞扬跋扈?总之,这不成熟的行为并非强者的表现。
42
65
23