在游戏制作过程中,游戏对象要根据游戏的需要进行物理属性的交互。
因此,Unity 3D 的物理组件为游戏开发者提供了碰撞体组件。碰撞体是物理组件的一类,它与刚体一起促使碰撞发生。
    碰撞体是简单形状,如方块、球形或者胶囊形,在 Unity 3D 中每当一个
    
     GameObjects
    
    被创建时,它会自动分配一个合适的碰撞器。
   
    一个立方体会得到一个
    
     Box Collider
    
    (立方体碰撞体),一个球体会得到一个
    
     Sphere Collider
    
    (球体碰撞体),一个胶囊体会得到一个
    
     Capsule Collider
    
    (胶囊体碰撞体)等。
   
    
     添加碰撞体
    
   
在 Unity 3D 的物理组件使用过程中,碰撞体需要与刚体一起添加到游戏对象上才能触发碰撞。
值得注意的是,刚体一定要绑定在被碰撞的对象上才能产生碰撞效果,而碰撞体则不一定要绑定刚体。
    碰撞体的添加方法是:首先选中游戏对象,执行菜单栏中的
    
     Component
    
    →
    
     Physics
    
    命令,此时可以为游戏对象添加不同类型的碰撞体。
   
    
   
    
     碰撞体选项设置
    
   
    Unity 3D 为游戏开发者提供了多种类型的碰撞体资源,如下图所示。当游戏对象中的
    
     Rigidbody 碰撞体组件
    
    被添加后,其属性面板中会显示相应的属性设置选项,每种碰撞体的资源类型稍有不同。
   
    
   
- Box Collider
 
    
     Box Collider
    
    是最基本的碰撞体,
    
     Box Collider
    
    是一个立方体外形的基本碰撞体。
   
    一般游戏对象往往具有
    
     Box Collider
    
    属性,如墙壁、门、墙以及平台等,也可以用于布娃娃的角色躯干或者汽车等交通工具的外壳,当然最适合用在盒子或是箱子上。
   
    下图所示是
    
     Box Collider
    
    ,游戏对象一旦添加了
    
     Box Collider
    
    属性,则在 Inspector 面板中就会出现对应的
    
     Box Collider
    
    属性参数设置。
   
    
   
| 参 数 | 含义 | 描述 | 
|---|---|---|
       
       | 
触发器 | 勾选该项,则该碰撞体可用于触发事件,并将被物理引擎所忽略。 | 
       
       | 
材质 | 为碰撞体设置不同类型的材质。 | 
       
       | 
中心 | 碰撞体在对象局部坐标中的位置。 | 
       
       | 
大小 | 碰撞体在X、Y、Z方向上的大小。 | 
    如果
    
     Is Trigger 选项
    
    被勾选,该对象一旦发生碰撞动作,则会产生 3 个碰撞信息并发送给脚本参数,分别是
    
     OnTriggerEnter
    
    、
    
     OnTriggerExit
    
    、
    
     OnTriggerStay
    
    。
   
    
     Physics Material
    
    定义了物理材质,包括冰、金属、塑料、木头等。
   
- Sphere Collider
 
    
     Sphere Collider
    
    是球体形状的碰撞体。
   
    
   
    
     Sphere Collider
    
    是一个基于球体的基本碰撞体,
    
     Sphere Collider
    
    的三维大小可以按同一比例调节,但不能单独调节某个坐标轴方向的大小,具体参数如下表所示。
   
| 参 数 | 含义 | 描述 | 
|---|---|---|
       
       | 
触发器 | 勾选该项,则该碰撞体可用于触发事件,并将被物理引擎所忽略。 | 
       
       | 
材质 | 为碰撞体设置不同类型的材质。 | 
       
       | 
中心 | 碰撞体在对象局部坐标中的位置。 | 
       
       | 
半径 | 设置球形碰撞体的大小。 | 
当游戏对象的物理形状是球体时,则使用球体碰撞体,如落石、乒乓球等游戏对象。
- Capsule Collider
 
    
     Capsule Collider
    
    由一个圆柱体盒两个半球组合而成,
    
     Capsule Collider
    
    的半径和高度都可以单独调节,可用在角色控制器或与其他不规则形状的碰撞结合来使用。
   
    通常添加至
    
     Character
    
    或
    
     NPC
    
    等对象的碰撞属性,如下图所示。
   
    
   
| 参 数 | 含义 | 描述 | 
|---|---|---|
       
       | 
触发器 | 勾选该项,则该碰撞体可用于触发事件,并将被物理引擎所忽略。 | 
       
       | 
材质 | 为碰撞体设置不同类型的材质。 | 
       
       | 
中心 | 碰撞体在对象局部坐标中的位置。 | 
       
       | 
半径 | 设置球形碰撞体的大小。 | 
       
       | 
局度 | 控制碰撞体中圆柱的高度。 | 
       
       | 
方向 | 设置在对象的局部坐标中胶囊体的纵向所对应的坐标轴,默认是Y轴。 | 
- Mesh Collider
 
    
     Mesh Collider
    
    (网格碰撞体)根据
    
     Mesh
    
    形状产生碰撞体,比起 Box
    
     Collider
    
    、
    
     Sphere Collider
    
    和
    
     Capsule Collider
    
    ,
    
     Mesh Collider
    
    更加精确,但会占用更多的系统资源。
   
专门用于复杂网格所生成的模型。
    
   
| 参 数 | 含义 | 描述 | 
|---|---|---|
       
       | 
凸起 | 
       勾选该项,则将会与其他的 发生碰撞。  | 
       
       | 
材质 | 为碰撞体设置不同类型的材质。 | 
       
       | 
网格 | 获取游戏对象的网格并将其作为碰撞体。 | 
- Wheel Collider
 
    
     Wheel Collider
    
    (车轮碰撞体)是一种针对地面车辆的特殊碰撞体,自带碰撞侦测、轮胎物理现象和轮胎模型,专门用于处理轮胎。
   
    
   
| 参 数 | 含义 | 描述 | 
|---|---|---|
       
       | 
质量 | 
       用于设置的质量。  | 
       
       | 
半径 | 用于设置碰撞体的半径大小。 | 
       
       | 
车轮减震率 | 用于设置碰撞体的减震率。 | 
       
       | 
悬挂距离 | 该项用于设置碰撞体悬挂的最大伸长距离,按照局部坐标来计算, 悬挂总是通过其局部坐标的 Y 轴延伸向下。 | 
       
       | 
中心 | 用于设置碰撞体在对象局部坐标的中心。 | 
       
       | 
悬挂弹簧 | 用于设置碰撞体通过添加弹簧和阻尼外力使得悬挂达到目标位置。 | 
       
       | 
向前摩擦力 | 当轮胎向前滚动时的摩擦力属性。 | 
       
       | 
当轮胎侧向滚动时的摩擦力属性。 | |
       
       | 
车轮减震率 | 用于设置碰撞体的减震率。 | 
       
       | 
车轮减震率 | 用于设置碰撞体的减震率。 | 
    Unity 3D 触发器(Trigger)
   
在 Unity 3D 中,检测碰撞发生的方式有两种:
- 利用碰撞体(Collider)。
 
- 利用触发器(Trigger)。
 
在很多游戏引擎或工具中都有触发器,它被用来触发事件。
例如,在游戏中的剧情里,玩家通过某个任务道具召唤了任务相关的 NPC 或者可击杀的怪物,就可以用触发器来实现。
    当绑定了碰撞体的游戏对象进入触发器区域时,会运行触发器对象上的
    
     OnTriggerEnter 函数
    
    ,同时需要在检视面板中的碰撞体组件中勾选
    
     IsTrigger 复选框
    
    。
   
    
   
触发信息检测使用以下 3 个函数:
- 
     
MonoBehaviour.OnTriggerEnter
(Collider collider),当进入触发器时触发。 
- 
     
MonoBehaviour.OnTriggerExit
(Collider collider),当退出触发器时触发。 
- 
     
MonoBehaviour.OnTriggerStay
(Collider collider),当逗留在触发器中时触发。 
Unity 3D 中的碰撞体和触发器的区别在于:
- 碰撞体是触发器的载体。
 
- 触发器只是碰撞体的一个属性。
 
如果既想要检测到物体的接触,又不想让碰撞检测影响物体移动,或者要检测一个物体是否经过空间中的某个区域,这时就可以用到触发器。
例如,碰撞体适合模拟汽车被撞飞、皮球掉在地上又弹起的效果,而触发器适合模拟人站在靠近门的位置时门自动打开的效果。