NWH Vehicle Physics2 文档Wheel Controller翻译
Wheel Controller
设定说明
- 将载具模型拖进场景中
- 将RigidBody组件附加在载具上
- 给载具添加Collider
- 创建新的GameObject
- 此对象要做为悬架系统的锚点,所以需要放在轮胎位置上方
- 拷贝轮胎对象,除了Transform对象删除其所有组件,然后向上拖动到弹簧行进的起点
- 在其上附加WheelController对象
调整车辆参数
Tips
- 弹簧长度不应小于0.2(或Time.fixedDeltaTime*10).小的弹簧刚度会导致当车轮在一帧里上下移动超过弹簧总长度时,悬挂系统触底。通常这回造成车辆在地面上弹开,因为悬挂系统没有吸收撞击的能量。如果你想要载具保持低位,请不要减小弹簧长度,而是考虑上移WheelController 对象,这会反过来时车轮上移,从而降低驾驶高度
- 最大弹簧力 = 载具重量*10
过度转向实现
- 减小后轮相对于前轮的
Maximum Tire Grip Force
- 向前调整centerOfMass。如果实现基于WheelController3D,你可以使用提供的脚本。如果实现基于NWH Vehicle Physic,centerOfMass选项可以在 VehicleControlle的setting选项卡中找到
- 增加后轮的弹簧刚度
- 增加后轮的roll-bar force
街机风格
默认来说,属性是基于现实中的模型设置的,要实现街机风格:
-
减小Slip Coefficient、增加Force Coefficient。如此设置,会让载具不容易打滑和旋转。推荐值 Slip Coefficient:0.3 force coefficient:0.6
-
调整摩擦力曲线使其更加线性。之后可能需要增加
Force Coefficient
,是载具更难打滑 -
降低centerOfMass,来减少载具翻转的可能性,并减少载具的q倾斜程度,表现得更像是卡丁车。请勿将重心降低到车轴高度以下,否则车辆可能开始向相反的方向倾斜。
属性解释说明
Wheel
- Rim offset 表示悬挂系统中心和轮缘中心的距离
- Drag Torque 制动力矩,用来模拟滚动阻力,是施加在轮胎上的常量力
- Use Rim Collider为真,则会生成一个半圆形的网格碰撞器,并将其放置在车轮的上半部分,以防止车轮的该部分将载具检测为地面,从而导致车轮突然跳动。 还可以防止车轮侧面通过物体,因为地面检测仅发生在轮胎螺纹的下半部分。
Spring
- Max Force 当弹簧被最大程度压缩时,弹簧的最大弹力
- Max Length 最大延伸弹簧长度。 与Unity的WheelCollider中不同,没有目标弹簧位置设置,因为弹簧在空中时会完全伸展(如其应有的那样)。 因此,弹簧的静止长度是事先未知的。 因此,将车辆置于静止位置的最佳方法是进入播放模式,让车辆稳定下来,然后复制Transform
- Force Curve 在两个轴上均具有归一化的值(均为0到1)。 X表示弹簧压缩(0表示松弛,1表示压缩),Y轴表示力。 实际的X和Y最大值可通过“最大力”和“最大长度”进行调整。
Damper
- Bump Force 压缩时的减震器的最大力
- Rebound Force 拉伸时减震器的最大力
- Curve 决定了弹簧的速度和力的关系(x轴表示速度,y轴表示力)
Geometry
Camber At Top
andCamber At Bottom
表示悬挂系统移动到最高点和最低点时的外倾角- Squat 当轮胎通过摩擦往地面施加一个力时,会在轮轴周围产生相反方向的扭矩。Squat 决定了传递到载具的力矩,以百分比表示。设置为1的效果时后端会因为加速而下蹲,-1则相反
Friction
Friction Preset
FrictionPreset是一个包含轮胎摩擦属性数据的ScriptableObject
车轮碰撞体使用基于滑动的摩擦模型计算摩擦力。车轮总会有些打滑,在正常状态下打滑程度非常低,在曲线上的左下部分。
上图中,X轴表示打滑程度,Y轴表示摩擦力。曲线左边的部分是轮胎在正常操作下的表现,称之为“has traction”,右边的部分表示轮胎失去的牵引力
。不同的曲线会让载具在失去牵引力控制上有不同的表现。下面是曲线的参数,以及它们是如何影响处理的说明:
-
B(stiffness):较高的值会让曲线更陡峭,更快达到峰值,意味着载具稍微一打滑就会失去牵引力的控制,使载具会表现得不稳定,更容易旋转。较低的值会使载具表现的更稳定,很难旋转。过低的值会让载具表现得像在冰面上一样
-
C(shape)-决定了转峰值之后转折点的强度。较高的值会使转折点变尖,而较低的值会使之后的曲线更平
-
D(peak)-值越高,轮胎拥有的牵引力越多。简单来说,摩擦力结果值等于峰值乘以slip coefficient 再乘以其他值。
-
E(falloff)-决定了曲线在峰值之后降落的速度快慢。它取决于其他参数,但是较低的值通常表示曲线的结束点更接近于0,而值1则表示曲线在峰后几乎是水平的。如果设置为低值,则一旦失去牵引力,车辆将开始滑动;如果设置为高值,则曲线的“具有牵引力”和“失去牵引力”部分几乎没有差异。
其他参数
- Slip Coefficient- 滑动系数。用于在不改变曲线的情况下,改变摩擦力的表现
- Force Coefficient - 轮胎摩擦力系数。大致等于摩擦曲线的Pacejka参数的D参数。
Load and Forces
轮胎的抓地力随负载增加而增加。 多少取决于轮胎,但是在大多数轮胎中,这种抓地力/负载关系直到开始趋于稳定的某个点才是线性的。 载荷抓地力曲线模仿了以下关系,其中X轴表示最大轮胎载荷的百分比(0到1),Y轴表示最大轮胎抓力的百分比(0到1)。 车轮性能在很大程度上取决于这些值。
Ground Detection
WheelController中的地面检测是通过发射一个或多个射线到地面以检测地面形状。 这是经过高度优化的,并且射线被分批处理。 不过,由于需要对接收到的匹配数据进行一些后处理,因此射线的数量确实会影响性能。
- Sinle Ray-只会从轮胎中心发出一条射线。与Unity的WheelCollider做的事情一样。适用于赛车游戏和没有太多障碍的游戏。
- Multiple rays-使用于需要更加准确的检测地面的情况。例如在越野游戏中,可以使用多条射线。 取消勾选“Single Rays”,将显示两个字段,即“Longitudinal Scan Resolution and Lateral Scan Resolution。 这两个字段确定将要投射的射线网格的分辨率。
Apply Force To Others
- 如果勾选上这个选项,则会与其他刚体进行交互。
Ground Detection - Layer Mask
由于Raycast用于检测地面,因此车轮还将检测其他物体,例如车辆本身。 为了防止这种情况,使用了“Layer Mask”。 默认情况下,自动设置Layer Mask被勾选,并且分配给父级(车辆)对撞机的所有图层都将自动从图层蒙版中删除(即将被忽略)。
Debug Values
调试面板展示了很多轮胎最重要的信息。
- 勾选Debug,在运行模式下可以看到调试 gizmos.
- Suspension Force Magnitude 可用于平衡车辆的重量分布。 调整刚体的质心,直到所有车轮在平坦表面上具有相同的力,以获得平均的重量分布。 如果使用WheelController资产调整质量中心是通过附带的脚本完成的,如果使用NWH Vehicle Physics 2,则可以在VehicleController 的settings选项卡中设置。
故障排除
- 在点击播放后,载具飞天了
- 载具没有碰撞器
- RigidBody质量为1
- WheelController很可能与父组件的碰撞体发生了碰撞
- 载具停不下来
- 增加车轮的Drag Torque
- 在无输入、保持静止的情况下,载具在震动
Time.fixedDeltaTime
值太大了。不推荐使用高于0.02的值,0.1667(物理以60HZ更新)会在牺牲很少的性能情况下很大程度上增加物理模拟的平稳性- 载具的center of mass太高了。尝试添加CenterOfMass脚本来降低质心。较高的质心具有试图平衡手指尖上的极点的效果,并且更容易产生振荡。
- 极大的spring length
- 摩擦曲线太硬或力系数/滑移系数太大。