车辆的现实转弯

时间:2015-12-19 14:51:08

标签: c# unity3d

我正在尝试为简单的车辆添加逼真的驾驶行为。目前我使用刚体MovePosition,当我从Input检测到前进/后退轴时,我只应用MoveRotation。

相反,即使汽车正在滑行,我也希望应用方向/旋转,但是当站立不动时不希望它转动,就像它是一辆履带式车辆一样。我还希望转弯似乎来自车辆的前部,车轮(不是游戏中的实际物体)将位于车辆前方。

到目前为止我所拥有的大部分都来自坦克教程:

m_MovementInputValue = Input.GetAxis(m_MovementAxisName);
    m_TurnInputValue = Input.GetAxis(m_TurnAxisName);

    // Create a vector in the direction the tank is facing with a magnitude based on the input, speed and the time between frames.
    Vector3 movement = transform.forward * m_MovementInputValue * m_Speed * Time.deltaTime;

    // Apply this movement to the rigidbody's position.
    m_Rigidbody.MovePosition(m_Rigidbody.position + movement);

    if (m_MovementInputValue > 0)
    {
        float turn = m_TurnInputValue * m_TurnSpeed * Time.deltaTime;

        // Make this into a rotation in the y axis.
        Quaternion turnRotation = Quaternion.Euler(0f, turn, 0f);

        // Apply this rotation to the rigidbody's rotation.
        m_Rigidbody.MoveRotation(m_Rigidbody.rotation * turnRotation);    
    }

1 个答案:

答案 0 :(得分:1)

我认为你可以通过查看Unity API的Wheel Collider组件节省一些时间:http://docs.unity3d.com/Manual/class-WheelCollider.html,我曾经看过一个演示,它曾用它制作一个完整的赛车游戏,所以它应该做的伎俩模拟真实的车辆(Demo in question)。

除此之外,你可以做到这一点:

对于初学者,如果您希望车辆仅在前进或后退时转弯,您可以将转动力乘以车辆的速度前进矢量

float turn = m_TurnInputValue * m_TurnSpeed * Time.deltaTime * (m_Rigidbody.velocity.magnitude / MaxVehicleSpeed);

(m_Rigidbody.velocity.magnitude / MaxVehicleSpeed)的想法是在0到1之间取决于车速。

然后转弯从车辆前方出现,你需要改变你的旋转点,我无法使用 MoveRotation 找到解决方案。你可以使用 Rigidbody AddForceAtPosition 函数来做到这一点,但计算它会变得更加复杂。

这是一个想法:

Vector3 force = transform.right * turn;
m_Rigidbody.AddForceAtPosition(force, MiddleOfWheelAxis);

使用 MiddleOfWheelAxis 两个前轮之间的点。