我已经关注了一对教程,并尝试提出可以使我的对象遵循轨迹的脚本,但不幸的是我的尝试都没有奏效。我理解弹丸运动的基本物理和数学但不能编程。
情况如下:
A是地面以上某个高度的固定物体,投掷物体必须遵循射弹运动,B以恒定速度向A(向左)移动,直线运动。我只想要A中的游戏物体点击按钮跟随弹丸动作。我自己做了很多尝试,但没有用。
答案 0 :(得分:3)
让我们更具体一点。射弹从A点发射,需要击中B,B在2D中以恒定速度水平移动。
随着时间的推移,这是射弹的位置:
P.x = A0.x + VP0.x * t
P.y = A0.y + VP0.y * t - g/2 * t^2
这是B的位置,随着时间的推移:
B.x = B0.x + VB0.x * t
B.y = B0.y
其中A0是A的位置,在时间0; B0是时间0的B的位置; VB0是B的速度(仅恒定和水平),VP0是我们发射射弹的速度。如果我们通过调整“' t”的值来约束系统。 (射弹击中B所需的时间),那么我们需要解决VP0。我们这样做是因为在碰撞时,P和B将是相等的:
A0.x + VP0.x * t = B0.x + VB0.x * t
A0.y + VP0.y * t - g/2 * t^2 = B0.y
解决VP0:
VP0.x = (B0.x - A0.x)/t + VB0.x
VP0.y = (B0.y - A0.y)/t + g/2 * t
既然我们有射弹的速度,可以使用上面的公式以简单的方式模拟它:
// calculate velocity when firing projectile
launchVelocity.x = (b.x - a.x) / desired_time + velocity_b.x;
launchVelocity.y = (b.y - a.x) / desired_time + gravity / 2 * desired_time;
// then for each frame, update position
elapsedTime += dt;
projectile.x = a.x + launchVelocity.x * elapsedTime;
projectile.y = a.y + (launchVelocity.y - gravity / 2 * elapsedTime) * elapsedTime;
需要注意的是,如果B向A方向移动,则velocity_b可能为负。
答案 1 :(得分:-1)
基本上我需要在拍摄时(因此在源脚本中)而不是在弹丸脚本中实例化
这有助于: Projectile motion