如何确保旋转的物体以正确的末端击中目标?


25

我正在研究一种投掷刀型武器,玩家可以自由瞄准然后投掷一把刀。刀在空中旋转,在碰撞时停止旋转,并将其自身与碰撞的物体作父母。旋转是通过动画处理的,而刀的路径是通过物理处理的。

我面临的一个问题是如何确保当刀与敌人碰撞时,刀将朝向他们。此刻有时会发生的情况是刀先嵌入敌人的手柄中。这显然是不现实的。同时,我认为如果刀首先与刀片碰撞,只刀“击中”敌人是非常不合理的,因为刀的旋转速度超出了玩家的控制范围。

我一直在观看许多类似武器的慢速杀伤镜头,每次抛出武器,它都会在空中旋转,而且魔术般地总是以叶片指向目标为目标。对于投掷距离将保持一致的游戏,这很简单。但是我不确定如何预测这一点,因为其中涉及许多不可预测的因素。刀的方向,刀的旋转,敌人的位置,与敌人的距离等。如果可能的话,我宁愿不必使用复杂的预测逻辑,因为游戏将用于相当低端的设备。有没有“烟和镜子”的方法来解决这个问题?

示例:https//youtu.be/0fav8lFpBko?t = 42s


15
总是先击中目标刀片的刀也不现实,尤其是当我们谈论移动目标时。
Theraot

1
根据游戏的风格,有许多不旋转刀片的掷刀样式。通常,他们通常使用专门为稳定飞行而设计的刀具。
珀金斯

如果刀的质心显着靠近手柄端而不是刀刃端,并且刀的旋转速度远大于其行进速度,则它实际上可能始终会与刀刃撞击目标。那将是一把非常奇怪的刀,并且可能是一个非常奇怪的生物,可能会像那样扔它
Sarge Borsch

2
这个问题非常突出,以至于有TVTropes的文章:刀片总是
Mason Wheeler

我也喜欢在问题中做出的区分。如果将旋转切换为也由物理引擎处理,则可能有足够的信息,然后在碰撞时进行计算,以查看刀头是否足够正确地面向目标。要么保留动画,要么预烘焙刀的动画指向前方的值,然后比较当前动画帧以查看其是否在该范围内。
Pysis

Answers:


35

假装

看一下您链接的视频,以慢动作观看...嗯,那是什么?相机跳到尽头,刀已经在目标的头盔中。

只是假装。一旦从刀到目标的距离很小,就神奇地跳到目标中的刀上。

编辑:您可以使用卷积预测来检查它是否会击中目标,然后假装它确实先击中了刀片,然后显示一个动画,其中目标不会移动并且刀将其杀死。


复杂的预测

因为刀子的旋转速度超出了玩家的控制范围。

没错 这是玩家无法控制的。但是,这并非超出您的控制范围...

如果您可以计算出刀必须行进的距离,则可以设定旋转速度,以使刀首先碰到刀片。

现在,在飞行中进行此预测没有任何意义,因为如果有障碍物进入,则刀必须进行调整。因此,扔球时会这样做。

必须遵循抛物线路径才能进行测试的事实使它比简单的射线投射更加复杂。我建议获取与刀抛相对应的抛物线运动方程,并以给定的时间间隔对其进行评估。

也可以通过找到抛物线中最接近障碍物位置的点来找到障碍物到抛物线的距离,然后对该点进行碰撞检查。

一旦知道刀必须行进多少,就可以将其划分为整数转数,这样它将首先击中刀片。编辑:或整数0.5,取决于您的投掷方式。

当然,当刀到达那一刻时,障碍物就会移动了……


现实点

您不会让刀头先100%地击中刀片,尤其是在移动目标时。只是拥抱一下,一把投掷的刀不是可靠的武器。因此,也可以选择让它在第一次触碰手柄时反弹。您可以通过检查其方向并将其与碰撞点的方向进行比较,来检查它是否首先击中了手柄。


1
我没看到跳格,多么聪明却如此简单。当我按照您的建议逐帧观看时,这非常明显。
FrontEnd

14

如果您提前知道刀子将落在何处-就像那些致命的凸轮镜头,这肯定是事后产生的-只需根据飞行距离和所需的转数计算正确的旋转速度即可。投掷刀首先离开投掷器,因此它需要旋转N + 0.5整圈1,其中N通常至少为1,但根据投掷者的技术水平或您希望它看起来有多酷,它可能更多:更多旋转=更酷。

如果您不这样做,则可以通过固定击中时的旋转来作弊,并可能用血迹将其隐藏起来。就像魔术师一样,如果做得足够快,玩家将不会注意到。

当然,这都不是现实的。在现实生活中,如果要让刀头先着陆,则掷刀确实很困难,并且需要进行大量练习。投掷者需要充分了解距离并相应地改变投掷,否则刀将首先击中。

1:在某些样式中,刀也先进入刀片。


4
+1:血溅。好,魔术。编辑:对于非Gore版本,则为尘云。
Theraot

2
@Theraot和/或使旋转速度足够快,以使观看者无法真正跟踪其指向的方向。
珀金斯

14
  1. 计算到目标的直线距离。

  2. 每个帧将刀的角度设置为2PI *(remainingStraightLineDistance)/(originalStraightLineDistance)* DesiredNumRotations。

如果您不沿直线移动刀具,则旋转比会略有变化,但没人会注意到。

如果您不预先确定目标(例如,您只是投掷并使用物理学来查看其命中目标),则需要对此进行捏造,但可以使用相同的原理来查看其可能命中的目标并调整旋转以适合该目标。


4

真正的掷刀设计为非常有可能先击中刀片。相应地设计刀具。

维基百科上的掷刀集合: 维基百科上的掷刀集合

您想要重心,因此要旋转中心, 尽可能远离刀片的尖端。这将增加刀片在手柄末端到达此处之前旋转到命中位置的几率。

叶片通常又长又薄,以使其尽可能地从质心突出,同时增加自身的质量。此外,手柄末端通常有一个盘形或球形的配重,有趣的是,我在Wikipedia图像的任何刀子中都没有看到它。

通过握住刀片的尖端并将手柄向发射方向弧形来抛出刀。


2

对于“烟和镜子”方式,可以使刀的旋转中心(即质心)靠近手柄(即非尖头部分)。这样,如果旋转速度比刀具速度足够高,则可以确保刀片的尖端与目标物碰撞,而不与其他任何部分碰撞。

有一些计算可以得出,即给定质量和尺寸中心的最小旋转速度,但应该很简单。还要注意,这并不意味着撞击的角度。


1

完美的掷刀者?

此刻,您说您正在通过动画旋转刀具。您使用什么参数控制角度?帧号?游戏时间?由任意旋转速率缩放?

如果改为使用参数(移动的距离)/(到目标的总距离),并以pi和(匝数+0.5)进行适当缩放,则刀的确总是总是神奇地首先到达点。


这个问题的第一部分似乎需要澄清。它可能应该作为对该问题的评论。您能否详细说明您提出的神奇到达点的方法?例如,您说“使用pi进行适当缩放”;什么缩放?可以合理地假设,如果用户必须询问,他们可能不了解适当的缩放比例。
Gnemlock

@TimB在解释它方面做得更好,但是Neil提出的解决方案是一个很好的方法。修改旋转刀动画的速度,以使其在达到目标时,刀处于“尖端朝另一个人”的位置。这比计算涉及移动目标等的抛物线轨迹要容易得多(编程和计算)。至于“ PI的适当缩放”可能仅为2,因为number_of_revolutions是Neil伪等式中的另一个变量。如果是关键帧动画,则只需缩放索引,而无需考虑pi。
AC
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.