Table of Contents

创建弹跳球

初级 设计师

在本教程中,我们将使用静态体和刚体组件创建一个在地面上弹跳的球。

1. 创建新项目

启动一个 New Game 项目。

默认场景预加载了五个实体:Camera(摄像机)、Directional light(平行光)、Skybox(天空盒)、Ground(地面)和 Sphere(球体)。我们将为 Ground 和 Sphere 实体添加物理组件。

2. 添加静态组件

首先,我们为 Ground 实体添加一个静态碰撞体组件。静态组件是不会移动的物理对象。典型的静态组件是墙壁、地面、大石块等。在这个例子中,静态组件将为球提供一个可以弹跳的表面。

  1. 选择 Ground 实体。

  2. 在 Property Grid 中,点击 Add component 并选择 Static Collider。

    添加静态碰撞体组件

  3. 设置碰撞体形状以匹配实体的形状。为此,在 Property Grid 中展开 Static Component 以查看其属性。

  4. 在 Colliders 旁边,点击 绿色加号按钮(添加)并选择 Box Collider。

    添加静态碰撞体组件

    这会为地面添加一个静态碰撞体,这样球就有可以弹跳的表面了。

  5. 将 Size 属性设置为 X: 10, Y: 0.1, Z: 10,用这个盒体创建一个平坦的平面

3. 添加刚体组件

接下来,我们将为球体添加一个刚体组件。刚体是会移动的物理对象——非常适合我们的弹跳球。

  1. 在 Scene Editor 中,选择 Sphere 实体。

  2. 在 Property Grid 中,点击 Add component 并选择 Rigidbody。

    添加静态碰撞体组件

  3. 就像我们为 Ground 实体所做的那样,设置碰撞体形状以匹配实体。为此,在 Property Grid 中展开 Body Component 以查看其属性。

  4. 在 Colliders 旁边,点击 绿色加号按钮(添加)并选择 Sphere。

    添加静态碰撞体组件

4. 放置球的位置

我们来放置球体的位置,让它从半空中开始并落到地面。

  1. 选择 Sphere 实体。

  2. 在 Property Grid 中,在 Transform 下将 Position 设置为:X: 0, Y: 6, Z: 0

    这会把球放在地面上方的半空中。

5. 放置摄像机的位置

现在我们移动摄像机,以便能很好地观察场景。

  1. 选择 Camera 实体。

  2. 在 Property Grid 中,在 Transform 下将 Position 设置为:X: 11, Y: 3, Z: -4

    你可以在 Scene Editor 右下角的 Camera preview 中预览摄像机的视野。

    摄像机预览

6. 设置恢复系数

让我们看看目前场景是什么样的。要运行项目,请按 F5。

球体(刚体)响应重力并下落。地面(静态碰撞体)挡住了它的下落。但还没有弹跳效果。

要创建弹跳效果,我们需要改变球体的 Spring Frequency 和 Spring Daming Ratio。

Note

Bepu 内部使用推测性接触(speculative contacts),这与传统的恢复系数(restitution)配合得不好。相反,弹跳可以通过接触约束的弹簧特性来实现,这一特性意味着弹跳实际上发生在多个模拟步中,而不是在接触的瞬间。这对于习惯了其他引擎基于恢复系数的弹跳行为的用户来说可能不太符合直觉。

  • 弹跳性主要由 Spring Damping Ratio 决定;将其设为零可最大限度地减少碰撞时的能量损失。
  • 增大 Spring Frequency 可能会降低碰撞时的弹跳性。这是因为积分速率变得太慢而无法表示运动,运动被阻尼掉了。提高子步速率或使用更多时间步可以在使用更高频率的同时保持弹跳性。

让我们设置球体的 Spring Frequency 和 Spring Damping Ratio。

  1. 选择 Sphere 实体。

  2. 在 Property Grid 中,在 Body 下将 Spring Frequency 设为 3,Spring Damping Ratio 设为 0。

要看看这会如何改变物理效果,请再次运行项目(F5)。这一次,球在地面上弹跳几次后停止:

既然我们已经创建了一个弹跳球,就可以用它来学习编写触发器脚本。

另请参阅