为什么物体在 Unity 2D 中以较低的速度不能正确反弹?

Why doesn't the object bounce correctly at lower speeds in Unity 2D?

P.S。我已经看到这个问题 ,但这适用于 Unity 3D,而我在 Unity 2D 中工作。

我的主要问题是,当速度设置为较低值时,我的 Unity 2D 游戏中的球不会正确反弹,但在较快的速度下运行良好。请注意,我已经尝试在项目设置中更改反弹阈值,但它没有解决我的问题。我已经应用了一个 Rigidbody2D 组件、BoxCollider2D 和一个 Physics Material 2D 应该使球有弹性。

这是我当前的一些设置(如果有帮助的话):

Rigidbody2D 设置:

物理 Material 2D 设置:

下面是一些在游戏加载时运行的初始化代码以开始球的移动:

float x = Random.value < 0.5f ? -0.75f : 0.75f;
float y = Random.value < 0.5f ? Random.Range(-0.75f, -0.5f) : Random.Range(0.5f, 0.75f);

Vector2 direction = new Vector2(x, y);
rb.AddForce(direction * speed);

注意:此代码位于我为球对象创建的自定义 class(继承 MonoBehavior)中以管理物理动作。

有关其他信息,请参阅 this video 以查看游戏如何响应。

我的比赛需要较慢的球速,如果能在这个问题上得到一些帮助,我将不胜感激。

Unity 物理系统 non-deterministic 不承诺能量守恒或其他功能。如果你想 fine-tune 你的物理系统达到这样的程度,你可能需要考虑使用其他方法来控制球的速度。

但是如果你确实想继续使用built-in物理引擎,你可以考虑使用更快的速度并降低时间尺度来补偿。

例如:

float x = Random.value < 0.5f ? -3f : 3f; 
float y = Random.value < 0.5f ? Random.Range(-3f, -2f) : Random.Range(2f, 3f); 

以及 StartAwake

中的某处
Time.timeScale = 0.25f;

并且您可能还想增加桨的速度以补偿时间刻度的变化。


另一种选择是使用更快的速度并增加所有内容的大小,并使相机视野更大,以使所有内容看起来大小相同。需要更少的代码更改,但可能需要更多 scene/component 更改。