我有一个带有刚体的GameObject和一个应用了“弹性”物理材质的BoxCollider。我希望对象一直反弹相同的高度,类似于Doodle Jump类型的游戏。我将物理材料的弹性设置为1,根据我看过的几个教程,应该保持球弹跳到相同的高度。我的场景非常基本,并没有太多发生,但我似乎无法让它发挥作用。有什么建议让我的物体反复弹跳相同的高度?
你的球员的bounciness
与他击中的表面的弹性结合在一起。在你的球员物理材料中将Bounce Combine
设置为Maximum
。这样它应该根据文档工作,因为bounciness
的1
意味着没有任何能量损失的弹跳,你现在正在采取最大的1
和其他表面最可能小于1
的东西。
但是,无论出于什么原因,你的玩家现在每次弹跳都会获得一点高度。我猜这是引擎中的一些舍入错误。你可以尝试摆弄bounciness
的0.97
或类似的东西,它可能会工作。
如果你找不到最佳位置或在所有设备上表现不一样,你可以自己实现弹跳,只要玩家与表面碰撞就反转速度。
我知道这个答案是迟到的,但也许我的解决方案会帮助别人。除了解决整个问题的上述解决方案之外,您还可以将其放入脚本中
void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.tag.Equals("ground"))
rigidbody.velocity = new Vector2(rigidbody.velocity.x, 0); // set y velocity to zero
rigidbody.AddForce(new Vector2(0, 400)); // some constant force here
}
}
如果你只使用上面的答案你会遇到一个问题,当你有两个不同Y位置的球,因为弹跳高度不一样,我的解决办法是将球的速度重置为0并再次将其重新强制为400 (作为我的例子)