Unity之碰撞体组件
3D物理组件中碰撞体组件添加与设置
碰撞体是物理组件中的一类,3D物理组件和2D物理组件有独特的碰撞体组件,它要与刚体一起添加到游戏对象上才能触发碰撞。如果两个刚体相互撞在一起,除非两个对象有碰撞体时物理引擎才会计算碰撞,在物理模拟中,没有碰撞体的刚体会彼此相互穿过。
在3D物理组件中添加碰撞体的方法:首先选中一个游戏对象,然后依次选择菜单栏Component→Physics命令,可选择不同的碰撞体类型,这样就在该对象上添加了碰撞体组件。
1. Box Collider(盒碰撞体)。
盒碰撞体是一个立方体外形的基本碰撞体。该碰撞体可以调整为不同大小的长方体,可用作门、墙及平台等,也可用于布娃娃的角色躯干或者汽车等交通工具的外壳,当然最适合用在盒子或箱子上。
- Edit Collider:编辑碰撞体。单击按钮即可在Scene视图中编辑碰撞体。
- Is Trigger:触发器。选中该项,则该碰撞体可用于触发事件,同时忽略物理碰撞。
- Material:材质。采用不同的物理材质类型决定了碰撞体与其他对象的交互形式,单击右侧的按钮可弹出物理材质选择对话框。
- Center:中心。碰撞体在对象局部坐标中的位置。
- Size:大小。碰撞体在X、Y、Z方向上的大小。
2. Sphere Collider(球形碰撞体)。
球形碰撞体是一个基本球体的基本碰撞体。球形碰撞体的三维大小可以均匀地调节,但不能单独调节某个坐标轴方向的大小,该碰撞体适用于落石、乒乓球等游戏对象。
- Edit Collider:编辑碰撞体。单击按钮即可在Scene视图中编辑碰撞体。
- Is Trigger:触发器。选中该项,则该碰撞体可用于触发事件,同时忽略物理碰撞。
- Material:材质。采用不同的物理材质类型决定了碰撞体与其他对象的交互形式,单击右侧的按钮可弹出物理材质选择对话框,可为碰撞体选择一个物理材质。
- Center:中心。碰撞体在对象局部坐标中的位置。
- Radius:半径。球体碰撞体的半径。
3. Capsule Collider(胶囊碰撞体)。
胶囊碰撞体由一个圆柱体和与其相连的两个半球体组成,是一个胶囊形状的基本碰撞体。胶囊碰撞体的半径和高度都可以单独调节,可用在角色控制器或与其他不规则形状的碰撞结合来使用。Unity中的角色控制器通常内嵌了胶囊碰撞体。
- Edit Collider:编辑碰撞体。单击按钮即可在Scene视图中编辑碰撞体。
- Is Trigger:触发器。选中该项,则该碰撞体可用于触发事件,同时忽略物理碰撞。
- Material:材质。采用不同的物理材质类型决定了碰撞体与其他对象的交互形式,单击右侧的按钮可弹出物理材质选择对话框,可为碰撞体选择一个物理材质。
- Center:中心。碰撞体在对象局部坐标中的位置。
- Radius:半径。该项用于控制碰撞体半圆的半径大小。
- Height:高度。该项用于控制碰撞体中圆柱的高度。
- Direction:方向。在对象的局部坐标中胶囊的纵向方向所对应的坐标轴,默认是Y轴。
4. Mesh Collider(网格碰撞体)。
网格碰撞体通过获取网格对象并在其基础上构建碰撞,与在复杂网格模型上使用基本碰撞体相比,网格碰撞体要更加精细,但会占用更多的系统资源。开启Convex参数的网格碰撞体才可以与其他的网格碰撞体发生碰撞。
- Edit Collider:编辑碰撞体。单击按钮即可在Scene视图中编辑碰撞体。
- Is Trigger:触发器。选中该项,则该碰撞体可用于触发事件,同时忽略物理碰撞。
- Material:材质。采用不同的物理材质类型决定了碰撞体与其他对象的交互形式,单击右侧的按钮可弹出物理材质选择对话框,可为碰撞体选择一个物理材质。
- Mesh:网格。获取游戏对象的网格并将其作为碰撞体。
网格碰撞体按照所附加对象的Transform组件属性来设置碰撞体的位置和大小比例。碰撞网格使用背面效应方式,如果一个对象与一个采用背面效应的网格在视觉上相碰撞的话,那么他们并不会在物理上发生碰撞。使用网格碰撞体有一些限制的条件:通常两个网格碰撞体之间并不会发生碰撞,但所有的网格碰撞体都可与基本碰撞体发生碰撞。如果碰撞体的Convex参数设为开启,则它也会与其他的网格碰撞体发生碰撞。需要注意的是,只有当网格碰撞体的三角数量少于255时,Convex参数才会生效。
5. Wheel Collider(车轮碰撞体)。
车轮碰撞体是一种针对地面车辆的特殊碰撞体。它有内置的碰撞检测、车轮物理系统及有滑胎摩擦的参考体。除了车轮,该碰撞体也可用于其他的游戏对象。
- Mass:质量。该项用于设置车轮碰撞体的质量。
- Radius:半径。该项用于设置车轮碰撞体的半径。
- Wheel Damping Rate:车轮的阻尼值。该项用于设置车轮的阻尼率。
- Suspension Distance:悬挂距离。该项用于设置车轮碰撞体悬挂的最大伸长距离,按照局部坐标来计算。悬挂总是通过其局部坐标的Y轴延伸。
- Force App Point Distance:力应用点的距离。该项定义车轮力作用点与车轮水平最低点之间的距离。当该参数为0时,车轮力将被应用于沿其父物体Y轴方向Wheel Collider的最低点上,将该点放置略低于车辆质量中心点的位置效果更好。
- Center:中心。该项用于设置车轮碰撞体在对象局部坐标的中心。
- Suspension Spring:悬挂弹簧。该项用于设置车轮碰撞体通过添加弹簧和阻尼外力使得悬挂达到目标位置。
- Spring:弹簧。弹簧力度越大,悬挂到达目的位置也就越快。
- Damper:阻尼器。阻尼器控制着悬挂的速度,数值越大悬挂弹簧移动速度越慢。
- Target Position:目标位置。悬挂沿着其方向上静止时的距离。其值为0时悬挂为完全伸展状态,值为1时为完全压缩状态,默认值为0,这与常规的汽车悬挂状态相匹配。
- Forward Friction:向前摩擦力。当轮胎向前滚动时的摩擦力属性。
- Extremum Slip:滑动极值。
- Extremum Value:极限值。
- Asymptote Slip:滑动渐进值。
- Asymptote Value:渐进值。
- Stiffness:刚性因子。极限值与渐进值的乘数(默认为1),刚度变化的摩擦。设置为零时将禁用所有的车轮摩擦。通常在运行时通过脚本修改刚度来模拟各种地面材料。
- Sideways Friction:侧向摩擦力。当轮胎侧向滚动时的摩擦力属性。
- Extremum Slip:滑动极值。
- Extremum Value:极限值。
- Asymptote Slip:滑动渐进值。
- Asymptote Value:渐进值。
- Stiffness:刚性因子。极限值与渐进值的乘数(默认为1),刚度变化的摩擦。设置为零时将禁用所有的车轮摩擦。通常在运行时通过脚本修改刚度来模拟各种地面材料。
车轮的碰撞检测是通过从局部坐标Y轴向上投射一条射线来实现的。车轮有一个通过悬挂距离向下延伸的半径,可通过脚本中不同的属性值来对车辆进行控制。这些属性值有motorTorque(发动机转矩)、brakeTorque(制动转矩)和steerAngle(转向角)。车轮碰撞体育物理引擎的其余部分相比,是通过一个基于滑动摩擦力的参考体来单独计算摩擦力的。这会产生更真实的互动行为,但是车轮碰撞体就不受物理材质的影响了。
① 车轮碰撞体的设置:不需要通过调转或滚动待有车轮碰撞体的游戏对象来控制车辆,因为绑定了车轮碰撞体的游戏对象其但相对于汽车而言本身是固定的。然而若要调转或滚动车轮的话,最好的方法就是将车轮碰撞体和可见的车轮分开来设置。
② 碰撞体的几何结构:由于行驶的车辆具有一定的速度,因此创建合理的赛道碰撞集合体就显得尤为重要。特别是组成不可见模型的碰撞网格不应当出现小的凹凸不平现象。一般赛道的碰撞网格可以分开来制作,这样会更加平滑。
6、Terrain Collider(地形碰撞器)。
地形碰撞器是基于地形构建的碰撞体。
- Material:材质。采用不同的物理材质类型决定了碰撞体与其他对象的交互形式,单击右侧的圆圈按钮可弹出物理材质选择对话框,可为碰撞体选择一个物理材质。
- Terrain Data:地形数据。采用不同的地形数据决定了地形的外观,单击右侧的圆圈按钮可弹出地形数据选择对话框,可为碰撞体选择一个地形数据。
- Enable Tree Collider:开启树的碰撞体。若开启该项,将启用树的碰撞体。
文章摘自《Unity官方案例精讲》