【问题标题】:Weird Wheel spinning in unity奇怪的轮子统一旋转
【发布时间】:2021-10-29 07:52:16
【问题描述】:

我正在研究一个简单的汽车控制器脚本和我下载的悍马模型。该脚本按预期工作,但车轮不合适并且正在疯狂旋转。我尝试到处搜索,但没有找到任何解决方案。

代码如下:

using UnityEngine;

public class GroundVehicleController : MonoBehaviour {

    public void GetInput()
    {
        m_horizontalInput = Input.GetAxis("Horizontal");
        m_verticalInput = Input.GetAxis("Vertical");
    }

    private void Steer()
    {
        m_steeringAngle = maxSteerAngle * m_horizontalInput;
        frontDriverW.steerAngle = m_steeringAngle;
        frontPassengerW.steerAngle = m_steeringAngle;
    }

    private void Accelerate()
    {
        frontDriverW.motorTorque = m_verticalInput * motorForce;
        frontPassengerW.motorTorque = m_verticalInput * motorForce;
    }

    private void UpdateWheelPoses()
    {
        UpdateWheelPose(frontDriverW, frontDriverT);
        UpdateWheelPose(frontPassengerW, frontPassengerT);
        UpdateWheelPose(rearDriverW, rearDriverT);
        UpdateWheelPose(rearPassengerW, rearPassengerT);
    }

    private void UpdateWheelPose(WheelCollider _collider, Transform _transform)
    {
        Vector3 _pos = _transform.position;
        Quaternion _quat = _transform.rotation;

        _collider.GetWorldPose(out _pos, out _quat);

        _transform.position = _pos;
        _transform.rotation = _quat;
    }

    private void FixedUpdate()
    {
        GetInput();
        Steer();
        Accelerate();
        UpdateWheelPoses();
    }

    private float m_horizontalInput;
    private float m_verticalInput;
    private float m_steeringAngle;

    public WheelCollider frontDriverW, frontPassengerW;
    public WheelCollider rearDriverW, rearPassengerW;
    public Transform frontDriverT, frontPassengerT;
    public Transform rearDriverT, rearPassengerT;
    public float maxSteerAngle = 30;
    public float motorForce = 50;
}

【问题讨论】:

    标签: c# unity3d game-development


    【解决方案1】:

    Unity 控制台上的错误告诉您问题所在:

    UnassignedReferenceException:变量 frontDriverW 的 groundVehicleController 尚未分配。你可能需要 分配 GroundVehicleController 脚本的 frontDriverW 变量 在检查器中。

    好吧,当您的脚本运行时,它会尝试访问字段 frontDriverW,但由于它从未被分配过值,因此会引发上述异常。

    您需要进入包含 GroundVehicleController 脚本的对象的检查器,并为 frontDriverW 字段添加一个值。当您在那里时,请确保所有其他字段也有值,因为如果没有,这些也会导致相同的错误。

    根据您向我们展示的图片,无法知道您在哪个对象中添加了 GroundVehicleController 脚本,但只需检查所有 Humvee 对象,直到您在检查器中找到它。我的猜测是它可能会在对象 Wheels 或对象 Humvee 中。

    【讨论】:

    • 我尝试了很多脚本,但问题还是一样。
    • @loopiedoopie111 您是否找到了哪个 Unity 对象中包含 GroundVehicleController 脚本,您是否在检查器中为 frontDriverW 和其他字段添加了值?即使在检查器中为字段添加值后,错误是否仍然发生?
    【解决方案2】:

    a) 检查您创建的预制件,看看这些偏移量是否存在于预制件上。

    b) 您正在使用全局位置和旋转来更新车轮姿势。这可能是造成偏移的原因。尝试在本地设置姿势,或者只是让轮子网格跟随轮子对撞机所做的任何事情,确保它们都在同一个坐标空间下。为什么不将每个单独的轮子添加到相应的轮子对撞机?毕竟它们只是网格。

    c) 您根本没有在脚本中指定车轮网格。

    c) 在 RigidBody 上使用不同的质量值(保持重),并考虑在车轮碰撞器上附加物理材料以减少打滑和打滑(如果汽车控制器已经没有打滑设置)

    【讨论】:

    • 您能否提供第二个选项的代码?在本地设置姿势。
    猜你喜欢
    • 1970-01-01
    • 2022-11-29
    • 2012-12-25
    • 1970-01-01
    • 2011-11-01
    • 2015-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多