为什么物体在 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:有弹性(我的物理名称material)
- 模拟:真实
- 使用自动质量:错误
- 质量:1
- 线性阻力:0
- Angular拖动:0
- 重力等级:0
- 碰撞检测:离散
- 睡眠模式:开始唤醒
- 插值:None
物理 Material 2D 设置:
- 摩擦力:0
- 弹性:1
下面是一些在游戏加载时运行的初始化代码以开始球的移动:
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);
以及 Start
或 Awake
中的某处
Time.timeScale = 0.25f;
并且您可能还想增加桨的速度以补偿时间刻度的变化。
另一种选择是使用更快的速度并增加所有内容的大小,并使相机视野更大,以使所有内容看起来大小相同。需要更少的代码更改,但可能需要更多 scene/component 更改。
P.S。我已经看到这个问题
我的主要问题是,当速度设置为较低值时,我的 Unity 2D 游戏中的球不会正确反弹,但在较快的速度下运行良好。请注意,我已经尝试在项目设置中更改反弹阈值,但它没有解决我的问题。我已经应用了一个 Rigidbody2D 组件、BoxCollider2D 和一个 Physics Material 2D 应该使球有弹性。
这是我当前的一些设置(如果有帮助的话):
Rigidbody2D 设置:
- 体型:动态
- Material:有弹性(我的物理名称material)
- 模拟:真实
- 使用自动质量:错误
- 质量:1
- 线性阻力:0
- Angular拖动:0
- 重力等级:0
- 碰撞检测:离散
- 睡眠模式:开始唤醒
- 插值:None
物理 Material 2D 设置:
- 摩擦力:0
- 弹性:1
下面是一些在游戏加载时运行的初始化代码以开始球的移动:
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);
以及 Start
或 Awake
Time.timeScale = 0.25f;
并且您可能还想增加桨的速度以补偿时间刻度的变化。
另一种选择是使用更快的速度并增加所有内容的大小,并使相机视野更大,以使所有内容看起来大小相同。需要更少的代码更改,但可能需要更多 scene/component 更改。