刚体组件为游戏对象提供了物理属性,让游戏对象在场景中可以受到物理引擎的作用。当游戏对象添加了Rigidbody组件后,游戏对象便可以接受外力与扭矩力。任何游戏对象只有在添加Rigidbody组件后才会受到重力影响。当需要通过脚本为游戏对象添加作用力以及通过NVIDIA物理引擎与其它游戏对象发生互动的运算都必须有Rigidbody组件。
下面介绍两种给一个游戏对象添加一个Rigidbody组件的方式:
图1.1,由Component菜单选项添加
图1.2,直接在游戏对象的Inspector视图中添加
图1.3就是Rigidbody组件的属性面板图:
Mass-质量
该项用于设置游戏对象的质量(同一场景中,建议游戏对象之间的质量差值不要大于100倍)。
Drag-阻力
当游戏对象受力运动时受到的空气阻力(注意,不是物体间的摩擦力),0表示没有空气阻力,阻力极大时游戏对象会立即停止运动。
Angular Drag-角阻力
当游戏对象受扭矩力旋转时受到的控制阻力。0表示没有空气阻力,阻力极大时游戏对象会立即停止旋转。
Use Gravity-使用重力
开启此项,游戏对象会受到重力的影响。
Is Kinematic-是否开启动力学
开启此项,游戏对象将不再受物理引擎的影响从而通过Transform(几何变换组件)属性来对其操作。该方法适用于模拟平台的移动或者带有铰链关节刚体的动画。
Interpolate-插值
None:没有插值。
Interpolate:内插值,基于前一帧的Transform平滑此次的Transform。
Extrapolate:外插值,基于下一帧的Transform平滑此次的Transform。
Collision Detection-碰撞检测
该属性用于控制避免高速运动的游戏对象穿过其它对象而未发生碰撞,有三个选项可供选择。
- Discrete:离散碰撞检测。
该模式与场景中其它的所有碰撞体进行碰撞检测。该值为默认值。但是在离散式的碰撞检测中,帧与帧之间是独立的,因此会遇到问题,即碰撞体上一个帧没撞上墙,而下一个帧穿过了墙,该物体本身在任意一个帧独立来看都是不知道自己会撞墙的(物理学中管这个叫量子隧穿效应)。
对于拥有此属性的碰撞体:
1、该碰撞体在遇到本场景其他碰撞体时使用离散式碰撞检测(Discrete)。
2、其他碰撞体在遇到它时会使用离散式碰撞检测(Discrete)。
3、用于正常碰撞。(这是默认值) - Continuous:连续碰撞检测。
该模式用于检测与动态碰撞体(带有Rigidbody)碰撞,使用连续碰撞检测模式来检测与网格碰撞体(后续章节会讲)的(不带Rigidbody)碰撞。其它的刚体会采用离散碰撞模式。此模式适用于那些需要采用连续动态碰撞检测的对象相碰撞的对象。这对物理性能会有很大的影响,如果不需要对快速运动的对象进行碰撞检测,不建议使用此模式,建议使用离散碰撞检测模式。
对于拥有此属性的碰撞体:
1、该碰撞体在遇到其他动态碰撞体(即包含rigidbody)使用离散式碰撞检测(Discrete),在遇到静态MechColliders(即不含rigidbody)时使用连续式碰撞检测(Continuous)。
2、设为动态连续(Continuous Dynamic)的碰撞体在遇到该物体时使用连续式碰撞检测(Continuous), 其他碰撞体在遇到该物体时使用离散式碰撞检测(Discrete)。
3、用于设定被动态连续(Continuous Dynamic)的物体所碰撞的物体。(会影响物理引擎的性能表现) - Continuous Dynamic:连续动态碰撞检测。
该模式用于检测与采用连续碰撞模式或连续动态碰撞模式对象的碰撞,也可以用于检测没有Rigidbody的静态网格碰撞体。对于与之碰撞的其它对象可采用离散碰撞检测。该模式也可以用于检测快速运动的游戏对象。
对于拥有此属性的碰撞体:
1、该碰撞体在遇到其他设为连续(Continuous)或动态连续(Continuous Dynamic)的物体时使用连续式碰撞检测(Continuous)。在遇到静态MeshColliders(即不含rigidbody)时也使用连续式的碰撞检测。遇到其他碰撞体则使用离散式碰撞检测(Discrete)。
2、用于快速运动的物体。
也就是说:如果你有一个快速运动的小球,它会穿过一个静态的墙,那么将球设为Continuous即可解决问题。但如果你有多个这样的小球,它们之间则依旧会遇到互相穿过对方的问题,那么将球都设为Continuous Dynamic更好。
Constraints-约束
该项用于控制对于刚体运动的约束。
Freeze Position:冻结位置。刚体对象在世界坐标系中的x,y,z轴方向上(选中状态)的移动将无效。
Freeze Rotation:冻结旋转。刚体对象在世界坐标系中的x,y,z轴方向上(选中状态)的旋转将无效。