Unity2D 如何通过Velocity与Gravity计算2D物体跳跃高度
跳跃高度计算实现
你要的CalculateJumpHeight方法可以直接用竖直上抛运动的物理公式实现,原理是竖直方向初速度全部被重力抵消时达到最高点,推导后最大高度公式为:初速度平方 / (2 * 重力加速度大小)
基础版代码实现
float CalculateJumpHeight(float jumpInitialVelocity) { // 取2D重力的y分量绝对值,Unity默认重力向下为负值 float gravity = Mathf.Abs(Physics2D.gravity.y); // 代入竖直上抛最大高度公式 return (jumpInitialVelocity * jumpInitialVelocity) / (2 * gravity); }
适配自定义重力缩放的版本
如果你修改了刚体的gravityScale属性,用这个版本适配即可:
float CalculateJumpHeight(float jumpInitialVelocity, float gravityScale) { float gravity = Mathf.Abs(Physics2D.gravity.y) * gravityScale; return (jumpInitialVelocity * jumpInitialVelocity) / (2 * gravity); }
调用的时候传入当前刚体的重力缩放值即可:
float jumpHeight = CalculateJumpHeight(jump, rb.gravityScale);
补充说明
上面计算得到的是相对于起跳点的高度差,如果你要设置indicator的世界坐标,需要叠加起跳点本身的y轴坐标:
indicator.transform.position = new Vector2(transform.position.x, transform.position.y + jumpHeight);
内容的提问来源于stack exchange,提问作者DooshBlonk
相关产品推荐
相关产品推荐

