刚体可使游戏对象受物理引擎控制,在受到外力时产生真实世界的运动效果。
- Mass(质量):默认为1,大部分在0~1之间,不同质量的物体在不考虑阻力的情况下,下落速度是一致的,但两个刚体相互碰撞后的反弹效果会根据质量有所改变。
- Drag(阻力):表示物体移动时的空气阻力,0表示没有阻力,极大时可使物体停止运动。通常砖头阻力为0.001,而羽毛为10。
- AngularDrag(角阻力):当受到扭力旋转时物体受到的空气阻力,极大时可使物体停止旋转。
- Use Gravity(使用重力):使物体受地面引力的影响。
- Is kinematic(是否动力学):如果激活,则该物体不受物理引擎控制,而只能通过变换组件来操作(比如台球杆)。
- Interpolate(插值):用于缓解刚体运动时的抖动。
- Interpolate(内插值):基于上一帧的变换来平滑本帧变换。
- Extrapolate(外插值):基于下一帧的预估变换来平滑本帧变换。
- Constraints(约束):用于约束刚体的运动。
- Freeze Position(冻结位置):选中后刚体不会在对应的轴上移动。
- Freeze Rotation(冻结旋转):选中后刚体不会在对应的轴上旋转。
碰撞体使物体拥有实质性的边界,刚体在拥有碰撞体后才能实现碰撞效果,而碰撞体往往可以独立存在于物体上,从而实现更复杂的动态效果。
Unity 3D 为游戏开发者提供了多种类型的碰撞体资源,如下图所示。当游戏对象中的 Rigidbody 碰撞体组件被添加后,其属性面板中会显示相应的属性设置选项,每种碰撞体的资源类型稍有不同。

-
Box Collider(方块碰撞器):方块形状的碰撞器,也是最常用的碰撞器,可以指定触发器(Is Trigger)、材质(Material)、中心(Center)、大小(Size)。通常用于墙壁、门、平台、箱柜等物体。

-
Sphere Collider(球状碰撞器):球状碰撞器,可以指定触发器(Is Trigger)、材质(Material)、中心(Center)、半径(Radius)。通常用于球状物体。

-
Capsule Collider(胶囊碰撞器):胶囊状的碰撞器,可以指定触发器(Is Trigger)、材质(Material)、中心(Center)、半径(Radius)、高度(Height)。通常用于角色碰撞器。

-
Mesh Collider(网格碰撞器):根据 Mesh 形状产生碰撞体,比起 Box Collider、Sphere Collider 和 Capsule Collider,Mesh Collider 更加精确,但会占用更多的系统资源。
- 凸起(Convex):勾选该项,则Mesh Collider将会与其他的Mesh Collider发生碰撞。
- 触发器(Is Trigger):当凸起被选中后,可以指定触发器。
- 材质(Material):物体材质。
- 网格(Mesh):获取游戏对象的网格并将其作为碰撞体。

-
Wheel Collider(车轮碰撞器):车轮碰撞器是一种针对地面车辆的特殊碰撞体,自带碰撞侦测、轮胎物理现象和轮胎模型,专门用于处理轮胎。
- Mass(质量):用于设置 Wheel Collider 的质量。
- Radius(半径):用于设置碰撞体的半径大小。
- Wheel Damping Rate(车轮减震率):用于设置碰撞体的减震率。
- Suspension Distance(悬挂距离):该项用于设置碰撞体悬挂的最大伸长距离,按照局部坐标来计算, 悬挂总是通过其局部坐标的 Y 轴延伸向下。
- Center(中心):用于设置碰撞体在对象局部坐标的中心。
- Suspension Spring(悬挂弹簧):用于设置碰撞体通过添加弹簧和阻尼外力使得悬挂达到目标位置。
- Forward Friction(向前摩擦力):当轮胎向前滚动时的摩擦力属性。
- Sideways Friction(侧向摩擦力):当轮胎侧向滚动时的摩擦力属性。
- Wheel Damping Rate(车轮减震率):用于设置碰撞体的减震率。

-
Terrain Collider(地形碰撞器):地形碰撞器根据指定的材质(Material)及地形数据(Terrain Data)来实现碰撞效果。

物理材质用于调整碰撞对象的摩擦力和反弹效果。
Unity 3D 提供了一些物理材质资源,通过资源添加方法可以添加到当前项目中。
标准资源包提供了 5 种物理材质:
- 弹性材质(Bouncy)。
- 冰材质(Ice)。
- 金属材质(Metal)。
- 橡胶材质(Rubber)。
- 木头材质(Wood)。
属性详解:

- DynamicFriction(动态摩擦力):移动时的摩擦力[0 ~ infinity],通常为0 ~ 1之间。
- StaticFriction(静态摩擦力):静止时的摩擦力[0 ~ infinity],通常为0 ~ 1之间。
- Bounciness(弹力):值为 0 时不发生反弹,值为 1 时反弹不损耗任何能量。
- Friction Combine(摩擦力合并方式):定义两个碰撞物体的摩擦力如何相互作用,即将两个物体的摩擦力组合的方式。
- Average:取平均值。
- Minimum:取最小值。
- Multiply:取叠加值。
- Maximum:取最大值。
- Bounce Combine (反弹合并方式):定义两个相互碰撞的物体的相互反弹模式,即将两个物体的弹力力组合的方式。
- Average:取平均值。
- Minimum:取最小值。
- Multiply:取叠加值。
- Maximum:取最大值。
注意:3D物体由网格和纹理组成,所以如果要更换物体就要改变对象的MeshFilter.Mesh和MeshRender.Material.maintexture两个属性。
如果既想要检测到物体的接触,又不想让碰撞检测影响物体移动,或者要检测一个物体是否经过空间中的某个区域,这时就可以用到触发器。触发器是碰撞器的一个属性,碰撞体是触发器的载体。
例如,碰撞体适合模拟汽车被撞飞、皮球掉在地上又弹起的效果,而触发器适合模拟人站在靠近门的位置时门自动打开的效果。
触发器用于在游戏中触发事件。比如在游戏中的剧情里,玩家通过某个任务道具召唤了任务相关的 NPC 或者可击杀的怪物,就可以用触发器来实现。
在 Unity 3D 中,检测碰撞发生的方式有两种:
- 利用碰撞体(Collider)。
- 利用触发器(Trigger)。
勾选了Is Trigger的碰撞体,当满足以下条件后会调用OnTrigger方法。
- 两者具有碰撞组件;
- 其中之一带有刚体组件;
- 其中之一勾选了Is Trigger。
当绑定了碰撞体的游戏对象进入触发器区域时,会运行触发器对象上的 OnTriggerEnter 函数,同时需要在检视面板中的碰撞体组件中勾选 IsTrigger 复选框。
触发信息检测使用以下 3 个函数:
MonoBehaviour.OnTriggerEnter(Collider collider),当进入触发器时触发。
MonoBehaviour.OnTriggerExit(Collider collider),当退出触发器时触发。
MonoBehaviour.OnTriggerStay(Collider collider),当逗留在触发器中时触发。