【问题标题】:Wheel steering in Unity 3D using C#使用 C# 在 Unity 3D 中进行车轮转向
【发布时间】:2014-09-04 17:36:39
【问题描述】:

在使用 C# 编写脚本时,我还是个新手,而且我已经被这个问题困扰了好几天了。我制作了这个脚本,以便我的汽车可以在地图上移动,并且车轮在 Z 轴上旋转。脚本:

using UnityEngine;
using System.Collections;

public class CarMovement : MonoBehaviour
{
    public Transform wheelFLTrans;
    public Transform wheelFRTrans;
    public Transform wheelBRTrans;
    public Transform wheelBLTrans;
    public float MotorForce;
    public float Steerforce;
    public WheelCollider GumaPD;
    public WheelCollider GumaPLj;
    public WheelCollider GumaZD;
    public WheelCollider GumaZLJ;


    void Start()
    {
    }
    // Update is called once per frame


    void Update()
    {
        float v = Input.GetAxis("Vertical") * MotorForce;
        float h = Input.GetAxis("Horizontal") * Steerforce;
        GumaPD.motorTorque = v;
        GumaPLj.motorTorque = v;
        GumaPD.steerAngle = h;
        GumaPLj.steerAngle = h;
        wheelFLTrans.Rotate(Vector3.forward * GumaPLj.rpm * 2 * Mathf.PI / 60.0f * Time.deltaTime * Mathf.Rad2Deg);
        wheelFRTrans.Rotate(Vector3.forward * GumaPD.rpm * 2 * Mathf.PI / 60.0f * Time.deltaTime * Mathf.Rad2Deg);
        wheelBRTrans.Rotate(Vector3.forward * GumaZD.rpm * 2 * Mathf.PI / 60.0f * Time.deltaTime * Mathf.Rad2Deg);
        wheelBLTrans.Rotate(Vector3.forward * GumaZLJ.rpm * 2 * Mathf.PI / 60.0f * Time.deltaTime * Mathf.Rad2Deg);
        wheelFRTrans.eulerAngles = new Vector3(0f, Input.GetAxis("Horizontal"), 0f);
    }

}

现在我的问题是:

我想在驾驶汽车通过地图时添加车轮转向功能。就像当我按下 A 或 D 键时,轮子会根据我按下的键(A 或 D)转向方向。我试过这行代码:

       **wheelFRTrans.localEulerAngles = new Vector3(0, wheelFR.steerAngle, 0);**

这可行,但是由于某种原因我的前轮停止旋转:(。有人可以帮我解决这个问题吗,我已经被这个问题困扰了好几天了:(。我希望我的轮子可以旋转和转向同时:/。

对不起,我的英语不好。

谢谢!

【问题讨论】:

    标签: c# unity3d monodevelop


    【解决方案1】:

    我解决了这个问题:

        Tires[0].transform.Rotate(Vector3.right,-BLWheel.rpm * 2 * Mathf.PI / 60.0f * Time.deltaTime * Mathf.Rad2Deg,Space.Self);
        Tires[1].transform.Rotate(Vector3.right,BRWheel.rpm * 2 * Mathf.PI / 60.0f * Time.deltaTime * Mathf.Rad2Deg,Space.Self);
    
        Tires[2].transform.Rotate(Vector3.right, FLWheel.rpm * 2 * Mathf.PI / 60.0f * Time.deltaTime * Mathf.Rad2Deg,Space.Self);
        Tires[3].transform.Rotate(Vector3.right, -FRWheel.rpm * 2 * Mathf.PI / 60.0f * Time.deltaTime * Mathf.Rad2Deg,Space.Self);
    
        Tires[2].transform.Rotate(Vector3.up, FLWheel.steerAngle - tempAngle,Space.World);
        Tires[3].transform.Rotate(Vector3.up, FLWheel.steerAngle - tempAngle,Space.World);
        tempAngle = FLWheel.steerAngle;
    

    【讨论】:

      猜你喜欢
      • 2021-07-18
      • 1970-01-01
      • 1970-01-01
      • 2018-04-23
      • 2023-03-09
      • 1970-01-01
      • 2022-11-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多