unity3d物理引擎节点视频
Unity 内置了 NVIDIA 的 PhysX 物理引擎,PhysX 是目前应用最为广泛的物理引擎,被众多游戏大作采用。开发者借助该物理引擎,能够高效且逼真地模拟刚体碰撞、车辆驾驶、布料、重力等物理效果,让游戏画面更显真实与生动。
刚体(Rigidbody)组件
刚体组件的作用
Rigidbody(刚体)组件可使游戏对象在物理系统的控制下运动。刚体能够接受外力与扭矩力,以确保游戏对象像在真实世界中一样进行运动。任何游戏对象只有添加了刚体组件,才会受到重力的影响。通过脚本为游戏对象添加的作用力,以及通过 NVIDIA 物理引擎与其他游戏对象发生互动的运算,都要求游戏对象添加了刚体组件。
创建带刚体组件的游戏对象
依次打开 GameObject -> Create Empty,创建一个空游戏对象。然后选择该对象,打开菜单栏中的 Component -> Physics -> Rigidbody。
刚体组件的属性面板及属性详解
| 属性 | 说明 |
|---|---|
| Mass | 质量,用于设置游戏对象的质量。 |
| Drag | 阻力,当对象受力运动时受到的空气阻力。0 表示没有空气阻力,阻力极大时游戏对象会立即停止运动。 |
| Angular Drag | 当对象受扭矩力旋转时受到的空气阻力。0 表示没有空气阻力,阻力极大时游戏对象会立即停止运动。 |
| Use Gravity | 使用重力,若开启此项,游戏对象会受到重力的影响。 |
| Is Kinematic | 是否开启动力学,若开启此项,游戏对象将不再受物理引擎的影响,只能通过 Transform 属性来对其操作。 |
| Interpolate | 插值,用于控制运动的抖动情况,有 3 项可选: - None:没有插值; - Interpolate:内插值,基于前一帧的 Transform 来平滑此次的 Transform; - Extrapolate:外插值,基于下一帧的 Transform 来平滑此次的 Transform。 |
| Collision Detection | 碰撞检测,用于控制避免高速运动的游戏对象穿过其他对象而未发生碰撞,有 3 项可选: - Discrete:离散碰撞检测,该模式与场景中其他的所有碰撞体进行碰撞检测; - Continuous:连续碰撞检测; - Continuous Dynamic:连续动态碰撞检测模式。 |
| Constraints | 约束,用于控制对于刚体运动的约束。 |
碰撞体(Collider)
碰撞体是物理组件的一类,它要与刚体一起添加到游戏对象上才能触发碰撞。如果两个刚体相互撞在一起,只有当两个对象都有碰撞体时,物理引擎才会计算碰撞。在物理模拟中,没有碰撞体的刚体会彼此相互穿过。
各类碰撞体介绍
盒碰撞体(Box Collider)
盒碰撞体是一个立方体外形的基本碰撞体,可调整为不同大小的长方体,适用于门、墙、平台等,也可用于布娃娃的角色躯干或汽车等交通工具的外壳,最适合用在盒子或箱子上。 | 属性 | 说明 | | ---- | ---- | | Is Trigger | 触发器,勾选该项,则该碰撞体可用于触发事件,并将被物理引擎所忽略。 | | Material | 材质。 | | Center | 中心,碰撞体在对象局部坐标中的位置。 | | Size | 大小,碰撞体在 X、Y、Z 方向上的大小。 |
球形碰撞体(Sphere Collider)
球形碰撞体是基于球体的基本碰撞体,其三维大小可以均匀调节,但不能单独调节某个坐标轴方向的大小,适用于落石、乒乓球等游戏对象。 | 属性 | 说明 | | ---- | ---- | | Radius | 半径,球形碰撞体的大小。 |
胶囊碰撞体(Capsule Collider)
胶囊碰撞体由一个圆柱体和与其相连的两个半球体组成,呈胶囊形状。其半径和高度都可以单独调节,可用于角色控制器或与其他不规则形状的碰撞结合使用。 | 属性 | 说明 | | ---- | ---- | | Height | 高度,用于控制碰撞体中圆柱的高度。 | | Direction | 方向,在对象的局部坐标中胶囊的纵向方向所对应的坐标轴,默认是 Y 轴。 |
网格碰撞体(Mesh Collider)
网格碰撞体通过获取网格对象并在其基础上构建碰撞。与在复杂网格模型上使用基本碰撞相比,网格碰撞体更加精细,但会占用更多的系统资源。 | 属性 | 说明 | | ---- | ---- | | Smooth Sphere Collisions | 平滑碰撞,勾选该项后碰撞会变得平滑。 | | Mesh | 网格,获取游戏对象的网格并将其作为碰撞体。 | | Convex | 凸起,勾选该项,则网格碰撞体将会与其他的网格碰撞体发生碰撞。 |
车轮碰撞体(Wheel Collider)
车轮碰撞体是一种针对地面车辆的特殊碰撞体,它有内置的碰撞检测、车轮物理系统以及滑胎摩擦的参考体。 | 属性 | 说明 | | ---- | ---- | | Suspension Distance | 悬挂距离,用于设置车轮碰撞体悬挂的最大伸长距离,按照局部坐标来计算,悬挂总是通过其局部坐标的 Y 轴延伸向下。 | | Center | 中心,用于设置车轮碰撞体在对象局部坐标的中心。 | | Suspension Spring | 悬挂弹簧,用于设置车轮碰撞体通过添加弹簧和阻尼外力使得悬挂达到目标位置。 | | Forward Friction | 向前摩擦力,当轮胎向前滚动时的摩擦力属性。 | | Sideways Friction | 侧向摩擦力,当轮胎侧向滚动时的摩擦力属性。 |
角色控制器(Character Controller)
角色控制器主要用于对第三人称或第一人称游戏主角的控制,并不使用刚体物理效果。 | 属性 | 说明 | | ---- | ---- | | Slope Limit | 坡度限制,用于设置所控制的角色对象只能爬上小于或等于该参数值的斜坡。 | | Step Offset | 台阶高度,用于设置所控制的角色对象可以迈上的最高台阶的高度。 | | Skin Width | 皮肤厚度,该参数决定了两个碰撞体可以相互渗入的深度。较大的参数值会产生抖动现象,较小的参数值会导致所控制的游戏对象被卡住,较为合理的设定是该参数值为 Radius 值的 10%。 | | Min Move Distance | 最小移动距离,如果所控制的角色对象的移动距离小于该值,则游戏对象将不会移动。 | | Center | 中心,该参数决定了胶囊碰撞体在世界坐标中的位置。 | | Radius | 半径,胶囊碰撞体的长度半径。 | | Height | 高度,用于设置所控制的角色对象的胶囊碰撞体的高度。 |
布料组件
交互布料(Interactive Cloth)
交互布料组件可在一个网格上模拟类似布料的行为状态。
蒙皮布料(Skinned Cloth)
蒙皮布料组件与蒙皮网格渲染器一起用来模拟角色身上的衣服。如果角色动画使用了蒙皮网格渲染器,那么可以为其添加一个蒙皮布料,使其看起来更加真实、生动。
布料渲染器(Cloth Renderer)
用于渲染布料效果。
关节组件
铰链关节(Hinge Joint)
铰链关节由两个刚体组成,该关节会对刚体进行约束,使得它们就好像被连接在一个铰链上那样运动,适用于对门、模型及钟摆等物体的模拟。
固定关节(Fixed Joint)
固定关节组件用于约束一个游戏对象对另一个游戏对象的运动。
弹簧关节(Spring Joint)
弹簧关节组件可将两个刚体连接在一起,使其像连接着弹簧那样运动。
角色关节(Character Joint)
角色关节主要用于表现布娃娃效果,它是扩展的球关节,可用于限制每一个轴向上的关节。
可配置关节(Configurable Joint)
可配置关节组件支持用户自定义关节,它开放了 PhysX 引擎中所有与关节相关的属性,因此可像其他类型的关节那样来创造各种行为。
力场
力场是一种为刚体快速添加恒定作用力的方法,适用于类似火箭等发射出来的对象,这些对象在起初并没有很大的速度,但却在不断加速。