close

dfsfsfsdf  上篇中的移動方式會有坦克甩尾的現象,因為前進中轉彎時,原先方向的施力沒有完全消失,所以必須針對這個來做處理

    Vector3 aVelocity=rigidbody.velocity;//目前坦克移動的方向向量
    Vector3 aForwarddir=transform.TransformDirection(Vector3.forward);//坦克轉向後的新的方向向量
        
    Vector3 flatDir=Vector3.Normalize(new Vector3(aForwarddir.x,0,aForwarddir.z));
    Vector3 flatVelo=new Vector3(aVelocity.x,0f,aVelocity.z);//地面速度向量
        
    flatDir*=flatVelo.magnitude*Mathf.Sign(Vector3.Dot(flatVelo,flatDir));

//由目前新的坦克轉向向量乘以目前坦克移動推力與新轉向方向所產生的力矩強度。
    float diff=(flatVelo-flatDir).magnitude;//长度
    float maxCornerAccel=50f;
    float cornerAccel=maxCornerAccel;//轉向摩擦係數
    if(cornerAccel>diff)
        cornerAccel=diff;
        
    Vector3 cornerForce=-(flatVelo-flatDir).normalized*cornerAccel*rigidbody.mass;
     rigidbody.AddForceAtPosition(cornerForce,transform.position+transform.up*cWheelCollidersPos.y);

//轉彎時,消除原方向的力,就不會打滑
//將此推力推向坦克中心位置,但此位置的Y 座標必須與左右推力的Y 座標一致,若不如此做,推力將會讓坦克前後晃動。

arrow
arrow
    全站熱搜

    GABY 發表在 痞客邦 留言(0) 人氣()