You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity Wheel Collider车辆行驶过慢问题技术求助

Unity Wheel Collider车辆模拟速度过低且打滑问题

我正在使用Unity的Wheel Collider进行车辆模拟,尽管已设置符合现实的质量、阻力和扭矩数值,但车辆行驶速度远低于预期,且轮胎未出现打滑现象。

尝试过移除阻力后车辆仍行驶缓慢;增大motorTorque则引发轮胎打滑,调整摩擦参数提升滑移值和刚度后,打滑有所缓解但未彻底解决。期望通过参数调校实现车辆真实速度行驶且无过度打滑的平衡状态。

相关素材:

  • 问题演示视频
  • 车身刚体参数截图
  • Motor组件参数截图
  • Wheel Collider参数截图

代码实现

Tesla.cs

// Tesla.cs
public class Tesla : MonoBehaviour
{
    [SerializeField]
    private new Rigidbody rigidbody;

    [SerializeField]
    private Servomotor steerServomotor;

    [SerializeField]
    private Motor powerMotor;

    private bool isForwardGear = true;

    public float SpeedKmph => rigidbody.velocity.magnitude * 3.6f;
    public float MotorTorque => powerMotor.MotorTorque;
    public float BrakeTorque => powerMotor.BrakeTorque;
    public float SteerAngle => steerServomotor.SteerAngle;

    public void Accelerate(float amount)
    {
        powerMotor.MotorTorque = amount;
    }

    public void Brake(float amount)
    {
        powerMotor.BrakeTorque = amount;
    }

    public void Steer(float angle)
    {
        steerServomotor.SteerAngle = angle;
    }

    private void FixedUpdate()
    {
        isForwardGear = true switch
        {
            _ when Input.GetKey(KeyCode.E) => true,
            _ when Input.GetKey(KeyCode.Q) => false,
            _ => isForwardGear
        };

        var accelerateAmount = Input.GetKey(KeyCode.W) switch
        {
            true when isForwardGear => 1f,
            true when !isForwardGear => -1f,
            _ => 0f
        };

        var steerAmount = true switch
        {
            _ when Input.GetKey(KeyCode.A) => -1f,
            _ when Input.GetKey(KeyCode.D) => 1f,
            _ => 0f
        };

        Accelerate(accelerateAmount);
        Brake(Input.GetKey(KeyCode.S)? 1f : 0f);
        Steer(steerAmount);
    }
}

Motor.cs

// Motor.cs
public class Motor : MonoBehaviour
{
    [SerializeField]
    private WheelCollider[] wheels;

    [SerializeField]
    private float torqueMultiplier;

    private float motorTorque;
    private float brakeTorque;

    public float MotorTorque
    {
        get => motorTorque;
        set
        {
            motorTorque = value * torqueMultiplier;
            var wheelMotorTorque = motorTorque / wheels.Length;

            foreach (var wheel in wheels)
            {
                wheel.motorTorque = wheelMotorTorque;
            }
        }
    }

    public float BrakeTorque
    {
        get => brakeTorque;
        set
        {
            brakeTorque = value * torqueMultiplier;
            var wheelBrakeTorque = brakeTorque / wheels.Length;

            foreach (var wheel in wheels)
            {
                wheel.brakeTorque = wheelBrakeTorque;
            }
        }
    }

    private void Awake()
    {
        foreach (var wheel in wheels)
        {
            wheel.ConfigureVehicleSubsteps(5f, 12, 15);
        }
    }

    private void FixedUpdate()
    {
        var circumFerence = 2f * Mathf.PI * wheels[0].radius * wheels[0].transform.lossyScale.y;
        var speedOnKmh = circumFerence * wheels[0].rpm * 60f / 1000f;
        Debug.Log($"Wheel 0 Speed: {speedOnKmh} km/h");
    }
}

Servomotor.cs

// Servomotor.cs
public class Servomotor : MonoBehaviour
{
    [SerializeField]
    private WheelCollider[] wheels;

    [SerializeField]
    private float steerAngleMultiplier;

    private float steerAngle;

    public float SteerAngle
    {
        get => steerAngle * steerAngleMultiplier;
        set
        {
            steerAngle = value;
            foreach (var wheel in wheels)
            {
                wheel.steerAngle = steerAngle * steerAngleMultiplier;
            }
        }
    }
}

内容的提问来源于stack exchange,提问作者Tempus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 15:37:07