创建弹跳球
初级 设计师
Warning
Bullet Physics is being phased out. We no longer plan to support or expand its features as our focus shifts to Bepu Physics. We recommend transitioning to Bepu Physics for access to the latest updates and ongoing improvements.
在本教程中,我们将使用静态碰撞体和刚体组件创建一个在地面上弹跳的球。
Note
本教程中的截图和视频是使用早期版本的 Stride 制作的,因此某些 UI 部分以及默认的天空盒和球体可能与你的版本看起来不同。
1. 创建新项目
启动一个 New Game 项目。
默认场景预加载了五个实体:Camera(摄像机)、Directional light(平行光)、Skybox(天空盒)、Ground(地面)和 Sphere(球体)。我们将为 Ground 和 Sphere 实体添加物理组件。
2. 添加静态碰撞体
首先,我们为 Ground 实体添加一个静态碰撞体组件。静态碰撞体是不会移动的物理对象。典型的静态碰撞体是墙壁、地面、大石块等。在这个例子中,静态碰撞体将为球提供一个可以弹跳的表面。
选择 Ground 实体。
在 Property Grid 中,点击 Add component 并选择 Static Collider。

设置碰撞体形状以匹配实体的形状。为此,在 Property Grid 中展开 Static Collider component 以查看其属性。
在 Collider Shapes 旁边,点击
(添加)并选择 Infinite Plane。
这会为地面添加一个静态碰撞体,这样球就有可以弹跳的表面了。
3. 添加刚体碰撞体
接下来,我们将为球体添加一个刚体组件。刚体是会移动的物理对象——非常适合我们的弹跳球。
在 Scene Editor 中,选择 Sphere 实体。
在 Property Grid 中,点击 Add component 并选择 Rigidbody。

就像我们为 Ground 实体所做的那样,设置碰撞体形状以匹配实体。为此,在 Property Grid 中展开 Rigidbody component 以查看其属性。
在 Collider Shapes 旁边,点击
(添加)并选择 Sphere。
4. 放置球的位置
我们来放置球体的位置,让它从半空中开始并落到地面。
选择 Sphere 实体。
在 Property Grid 中,在 Transform 下将 Position 设置为:X: 0, Y: 6, Z: 0

这会把球放在地面上方的半空中。
5. 放置摄像机的位置
现在我们移动摄像机,以便能很好地观察场景。
选择 Camera 实体。
在 Property Grid 中,在 Transform 下将 Position 设置为:X: -12, Y: 7, Z: 9
将 Rotation 设置为:X: -20, Y: -50, Z: 0

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

6. 设置恢复系数
让我们看看目前场景是什么样的。要运行项目,请按 F5。

球体(刚体)响应重力并下落。地面(静态碰撞体)挡住了它的下落。但还没有弹跳效果。
要创建弹跳效果,我们需要改变球体和地面的恢复系数(Restitution)。这模拟了真实碰撞的恢复系数(维基百科)。
- 如果碰撞实体的 restitution 属性为 0,实体将在碰撞瞬间失去所有能量并停止移动。
- 如果 restitution 为 1,它们不会失去能量,并以碰撞时的速度反弹。
- 如果 restitution 大于 1,它们会获得能量,并以更大的速度反弹。
一般来说,要创建真实的碰撞,请将 restitution 设置在 0 到 1 之间。
让我们设置 Sphere 和 Ground 实体的 restitution。
选择 Sphere 实体。
在 Property Grid 中,在 Rigidbody 下将 Restitution 设置为 0.8。

选择 Ground 实体。
在 Property Grid 中,在 Static Collider 下将 Restitution 设置为 0.5。

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

试着将两个实体的 restitution 都改为 1。这会创建一个无限弹跳、不损失能量的球:

将 restitution 设为 1.1,球每次都会弹得更高一点:

现在我们已经创建了一个弹跳球,就可以用它来学习触发器了。更多信息请参见编写触发器脚本教程。