如何让FPS子弹马甲在游戏中平稳飞行(包括水面)?

制作FPS地图的地图作者通常可能会遇到模拟子弹弹道的问题,其中比较棘手的是子弹如何在水面上也能够保持平稳飞行而不会出现弹道的大幅晃动。

我们根据地图作者们的讨论整理出了本篇教程,如果你有类似的问题,希望本文可以给你提供参考。

正文

图1(陆地)图2(水面,BUG示意图)

要让子弹马甲在陆地上保持平直的飞行轨迹,即如果想要在发射点与目标点之间连成直线,即使飞行途中存在崎岖地形也不影响弹道,需要根据当前地表的Z坐标和子弹应当飞行的高度来计算出子弹马甲的真实Z坐标(图3)。

将子弹马甲的移动类型设定为“没有”,通过“乌鸦形态”改变高度,每一帧的具体飞行高度等于图1中绿色和紫色的数值之和。使用这条飞行高度计算思路可以完美实现陆地上的笔直飞行轨迹,不过水面上的飞行轨迹却存在问题(图2)。

经过SsCozak的研究,发现了以下问题:

  1. 如果马甲移动类型为“没有”,单位在水面上的飞行高度是以水底为参照面的,而单位所在的Z值对应的却是水面而不是水底。
  2. 如果将马甲移动类型设置为“两栖”,则单位飞行高度参照是水面,可以解决在水面上的平移问题,但由于增加了移动类型,又会导致如寻路、碰撞等其它问题。
  3. 根据判断马甲的所在位置是否为水面(借助“地形悬崖高度”),然后视情况额外增加飞行高度来保持弹道笔直的解决方案可以让子弹马甲在正常水面上和陆地的高度保持一致,但当子弹马甲经过地面和水面的边界时,仍然会出现大幅度的轨迹抖动。(图4,地面和水面边界BUG示意,注意陆地与浅水,浅水与深水交界处的抖动

随后金皮凤凰蛋绿色的金币给出回复:水面高度是不准确的,用装饰物模拟水来解决问题。

即如果要让FPS子弹马甲在游戏中平稳飞行,并且包括在水面上飞行,目前比较广泛的做法是找到水模型来模拟水,而不使用魔兽争霸3自带的水。

相关链接

讨论贴:求助。。关于FPS子弹马甲飞行弹道的高度问题