跳垫问题

我正在试着让一个人物跳上一个站在他上面的着陆台。 这里是我用过的公式(一切都是非常自我解释的,除了character_MaxForce ,这个角色可以跳跃的总力量):

 deltaPosition = target - character_position; sqrtTerm = Sqrt(2 * -gravity.y * deltaPosition.y + MaxYVelocity * character_MaxForce); time = (MaxYVelocity - sqrtTerm) / gravity.y; speedSq = jumpVelocity.x * jumpVelocity.x + jumpVelocity.z * jumpVelocity.z; 

如果speedSq < (character_MaxForce * character_MaxForce)我们有适当的时间,所以我们可以存储的价值:

 jumpVelocity.x = deltaPosition.x / time; jumpVelocity.z = deltaPosition.z / time; 

否则我们尝试另一种解决scheme:

 time = (MaxYVelocity + sqrtTerm) / gravity.y; 

然后存储它:

 jumpVelocity.x = deltaPosition.x / time; jumpVelocity.z = deltaPosition.z / time; jumpVelocity.y = MaxYVelocity; rigidbody_velocity = jumpVelocity; 

问题在于角色正在从着陆台跳下,或者有时他跳得太远,从未撞到着陆台。

通过比较“x”值,可以知道着陆path是左还是右。 或者你可以简单地计算两个垫之间的默认轨迹。 但是,如果你不想连接跳转和着陆点,那么你可以简单地在跳转点和一个标量(一个乘数)之间指定一个方向vector,这个标量就是角色的一个速度,使得他可以跳到某个方向。 调整标量和方向应该给你正确的轨迹。

默认情况下,轨迹是指使用二次贝塞尔曲线 。 你知道起点(跳板)和终点(着陆板)。 使用永远不会低于最高垫的控制点来定义您的“曲线”。

看看二次方程式,这很简单。 (这只会给你一个曲线)使用“t”跟踪曲线(介于0和1之间)。