
上篇文章介绍了Unity内置3D物理系统,本文将介绍2D物理模拟,因为它有助于开发2D方面的游戏,对于2D也可以像3D那样在引擎中进行精准碰撞,因此聊一聊如何使用它。
对于此2D物理模拟的过程,需要在Unity中新建一个新的项目,创建一个2D正方形和一个地面,可通过菜单Assets → Create → Sprites创建(下图所示),地面请自行拉长放置在底部,同样这个过程也不使用C#脚本,只需要使用物理系统通过预制件添加2D刚体组件即可实现它。

设置步骤
1.选择2D正方形,在检查器底部使用Add Component(添加组件)按钮,在内容列表搜索Rigidbody 2D(刚体2D)并直接选择。

2.此时就赋予了2D正方形的物理属性,正是因为有了质量,因此在Unity中运行游戏时小球就会往下掉。
但是…该正方形掉落下来并未与地面发生碰撞。
这是因为在创建2D的时候不会像3D那样自动创建一个碰撞体,虽然赋予了正方形的物理属性,但是俩个对象没有碰撞体,无法检测到对象的碰撞表面,则不会参与碰撞(通常软件的逻辑都是这样)。

3.解决这个问题,需要在添加组件中为正方形和地面分别添加一个Box Colliders。

添加完Box Colliders之后,就可以看到正方形正确碰撞到地面并停止了模拟。

4.现在有个新问题,正方体碰撞到直接停止有点生硬,因此我们可以让这个动画有个曲线回弹的过程并慢慢停止,因此需要为Box Collider指定一个2D物理材质。
可以通过创建菜单 → 2D → 物理材质2D,并在2D物理材质下适当的调整一下Bounciness(弹力性)属性值,接着拖拽这个物理材质放在Rigidbody 2D材质属性下。

5.添加完成之后在播放这个游戏时,可以从下面的最终效果看到2D正方形掉落到地面就不至于那么死板了,会有反弹的动画过程。
