WheelCollider笔记

The Wheel Collider is a special collider for grounded vehicles. It has built-in collision detection, wheel physics, and a slip-based tire friction model. It can be used for objects other than wheels, but it is specifically designed for vehicles with wheels.

车轮碰撞器是一个特殊的地面车辆碰撞器。它具有内置的碰撞检测、车轮物理引擎和一个基于滑移的轮胎摩擦模型。当然,它也可以用于其他对象,但它是专门为有轮子的车辆设计。


Unity文档:
WheelCollider -UnityDocumentation
参考DEMO:
Standard Assets -UnityAssetStore
Edy’s Vehicle Physics -UnityAssetStore


WheelCollider是Unity做物理车的一种组件,包括悬挂系统、前进后退拐弯等物理车操作。

在这里插入图片描述
组件的主要参数:分别是
Mass 质量
Radius 半径
wheelDampingRate 车轮尼阻
suspension distance 悬挂距离
forceAppPointDistance 施力点距离
Center 中心
Suspension Spring 悬挂弹簧
ForwardFriction 正方向摩擦
SideWaysFricition 侧方向摩擦


组成:

在这里插入图片描述
WheelCollider 最好与车轮模型分开处理,每一个车轮单独一个WheelCollider。并在代码中让车轮模型和WheelCollider在进行同步操作。
车轮模型最好自身Rotation为(0,0,0),并且父物体和WheelCollider的父物体在Rotation上保持一致。

WheelCollider的父物体需要一个Rigidbody组件,否则在Sence视图下WheelCollider也不会显示


前进后退:

wheelCollider.motorTorque //前进赋予这个力矩数值(>0)
wheelCollider.brakeTorque //后退赋予这个力矩数值(>0)

刹车时候减速也可通过赋予BrakeTorque来缩短减速时间

模拟前轮驱动:仅对前轮两个wheelCollider赋予力矩
模拟后轮驱动:仅对后轮两个wheelCollider赋予力矩
模拟四轮驱动:对四个wheelCollider赋予力矩
N轮驱动同理;

获取当前速度:

Rigidbody.velocity

Rigidbody.velocity是一个Vector3的值,包含其方向信息

获取速度值:Rigidbody.velocity.magnitude
获取速度方向:Rigidbody.velocity.normalized

保持车辆最大速度

if(speed >= maxSpeed)
{
	wheelCollider.motorTorque = 0;
}
else
{
	wheelCollider.motorTorque = value;
}

加速

加速跟前进一样都是可以通过

wheelCollider.motorTorque = value

实现,但是这一个加速是一个缓慢的起步过程。
实现快速起步或者快速加速可以通过:
1.直接给刚体速度
2.直接给刚体力
但是这两种方式都会造成车轮空转的问题

给刚体速度

        Vector3 dir = this.transform.forward;
        rb.velocity += normalMaxSpeed * 0.1f * dir.normalized;

给刚体前进力

        Vector3 dir = this.transform.forward;
        rb.AddForce(dir.normalized * force, ForceMode.VelocityChange)

模型同步

  Vector3 pos;
  Quaternion quat;
  wheelColliders.GetWorldPose(out pos, out quat);

可以通过wheelColliders.GetWorldPose来获取WheelColliders 的世界坐标跟旋转角度,然后赋予到对应的车轮模型上进行同步

当然你也可以根据需要修改某些值跟只取某些值

quat.eulerAngles.x 为车轮向前后滚动的值
quat.eulerAngles.z 为车轮向左右偏转的值


车辆转向

车辆转向可以使用WheelCollider进行转向,也可以通过旋转车体进行转向

使车轮偏转角度,然后根据物理使车辆转动,一般都对前轮进行操作:

wheelCollider.steerAngle = value;

使车身偏转角度,直接拐弯

    this.transform.Rotate(new Vector3(-x, 0, 0));

要模拟前轮先转后面再甩尾的话可以增加一个旋转中心,在旋转

      this.transform.RotateAround(rotateCenter.position ,Vector3.up, angle);

但是后面的直接偏转车身的话wheelCollider本身不会旋转,所以车轮模型的偏转需要脱离WheelCollier,而自己去指定Z轴的偏转角度


其他

可以指定车身质量中心来使车平稳

Rigidbody.centerOfMass = massCenter.localPosition;

获取WheelCollider 是否着地

wheelCollider.isGrounded

获取WheelCollider转速

wheelColliders.rpm

猜你喜欢

转载自blog.csdn.net/qq_33205561/article/details/86701156
今日推荐