定时导弹

我正在玩玩家和导弹。

我想把一枚导弹从P1发射到P2。 导弹总是需要5秒才能到达P2。 导弹还应该跟踪P2。 如果P2移动得更远,导弹必须加速以满足时间限制。 如果P2向左移动,则导弹必须向左移动(并且也改变速度)。 如果P2接近P1,导弹必须放慢速度。

这可能吗? 什么是完成这个最好的方法?

我目前没有Vector2D类(这实际上不是一个游戏,但类比效果很好),所以如果可能的话,我想要一个不需要的解决scheme。

编辑:这其实也不是导弹。 🙂

谢谢!

编辑令人放心。 🙂

好的,这是一个简单的更新循环…

假设当我们发射导弹,我们初始化remainingFlightTime = 5f然后…

 void UpdateMissile(float deltaTime) { remainingFlightTime -= deltaTime; // At the end of the trajectory, snap to target & explode. // The math will put us there anyway, but this saves // on fancy logic related to overshooting. ;) if(remainingFlightTime <= 0f) { myX = targetX; myY = targetY; MissileImpact(); return; } // Compute straight-line velocity that will take us // to the target in exactly the time remaining. velocityX = (targetX - myX)/remainingFlightTime; velocityY = (targetY - myY)/remainingFlightTime; // Integrate the velocity into the position. myX += velocityX * deltaTime; myY += velocityY * deltaTime; } 

为什么不使用这个位置并更新目标位置?

你可能不得不看看lerping如何工作,但它看起来像这样:

 public position startMarker; public float duration = 5.0f; private float startTime; void Launch() { startTime = Time.time; } void Update() { float distCovered = (Time.time - startTime) / duration; missile.position = Vector3.Lerp(startMarker.position, target.position, distCovered); } 

通过学习,你基本上可以在一定的时间内改变一个对象的位置,所以你可以说你是A到B的50%,而对象将被放置在那里。 勒平是直接的,所以你总是会走向目标(如你想在评论中)。