Unity3d中的抛射运动

本文关键字:运动 Unity3d | 更新日期: 2023-09-27 18:13:21

我已经遵循了一对教程,并试图提出可以使我的对象遵循轨迹的脚本,但不幸的是,我的尝试都没有成功。我了解抛射运动的基本物理和数学,但不会编程。

情况如下:

A是离地面一定高度的固定物体,它抛出的物体必须跟随抛射运动,B以匀速线性运动向A(向左)移动。我只是想让游戏对象从A跟随弹丸运动,点击一个按钮。我自己也试过很多次,但都没有成功。

Unity3d中的抛射运动

让我们更具体一点。弹丸从A点发射,需要击中在2D中以等速水平移动的B。

这是弹丸的位置,随时间的变化:

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是B在时刻0的位置;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可以为负

基本上我需要在拍摄时(因此在源脚本中)而不是在投射脚本中进行实例化

这帮助:抛物运动