unity3d 按下“Play”时,车轮网格在y轴上旋转,Unity

5kgi1eie  于 2023-03-19  发布在  其他
关注(0)|答案(1)|浏览(179)

所以我正在制作一款汽车游戏,目前正在从测试版转向量产版。
一切都进行得很顺利,直到我带来了我的测试车模型的替代品(在默认的FBX. Settings中导出为一个对象)...无论如何,所以我引入了替换并将我的代码应用到它,汽车运行良好,并且它在移动,但是由于某种原因,车轮几何形状总是在其y轴上旋转90度。该代码通过将车轮碰撞器的变换信息应用于车轮几何体来工作。

// this function will update the car's wheels' positions and rotation as they are moving.
 private void UpdateWheelPosAndRotation()
{
    UpdateIndiWheelPosAndRotation(FPW, FPT);
    UpdateIndiWheelPosAndRotation(FDW, FDT);
    UpdateIndiWheelPosAndRotation(BPW, BPT);
    UpdateIndiWheelPosAndRotation(BDW, BDT);
}

//this is the helper function to the one above... It will take the wheel info from the collider and apply it to the transform.
 private void UpdateIndiWheelPosAndRotation(WheelCollider _wheelCollider, Transform _transform)
{
    Vector3 _pos = _transform.position;
    Quaternion _rot = _transform.rotation;

    _wheelCollider.GetWorldPose(out _pos, out _rot);

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

删除这段代码后,滚轮的y轴旋转保持正常。

这是我按播放键时的画面

任何关于尝试什么的想法,请评论该想法

0md85ypi

0md85ypi1#

我通过向车轮网格变换添加90度修正了该问题,为此,我创建了以下函数:

// for passenger side wheels
private void RotationCorrectionRight(Transform transform)
{
    Quaternion _rot = transform.rotation;
    _rot = _rot * Quaternion.Euler(0,-90,0);
    transform.rotation = _rot;
}
    // for driver side wheels
    private void RotationCorrectionLeft(Transform transform)
{
    Quaternion _rot = transform.rotation;
    _rot = _rot * Quaternion.Euler(0,90,0);
    transform.rotation = _rot;
}
  • 请注意,您必须使用代码段为每个车轮应用转换
RotationCorrectionRight(FPT);
    RotationCorrectionRight(BPT);

    RotationCorrectionLeft(FDT);
    RotationCorrectionLeft(BDT);

FDT、BDT...代表前驱动轮变换、后驱动轮变换,这与代表前乘客轮变换的FPT等相同

相关问题