Unity3d中的抛射运动
本文关键字:运动 Unity3d | 更新日期: 2023-09-27 18:13:21
我已经遵循了一对教程,并试图提出可以使我的对象遵循轨迹的脚本,但不幸的是,我的尝试都没有成功。我了解抛射运动的基本物理和数学,但不会编程。
情况如下:
A是离地面一定高度的固定物体,它抛出的物体必须跟随抛射运动,B以匀速线性运动向A(向左)移动。我只是想让游戏对象从A跟随弹丸运动,点击一个按钮。我自己也试过很多次,但都没有成功。
让我们更具体一点。弹丸从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可以为负
基本上我需要在拍摄时(因此在源脚本中)而不是在投射脚本中进行实例化
这帮助:抛物运动