2016-01-04 35 views
0

我在JavaScript中使用團結3d的船腳本。它幾乎可以完美運作,除非船隻永遠不會放慢速度,轉彎會導致無限的轉彎,除非您按相反的方向按鍵。我嘗試調整船對象本身的質量,拖動和角度拖動,我甚至在腳本中添加了代碼,它仍然沒有效果。遊戲中沒有其他腳本,除了在船上也有順暢的跟蹤腳本。統一3D - 拖動和角度拖動不工作

#pragma strict 

var speed : float = 1.0; 

var acceleration : float = 1.0; 

var maxspeed : float = 2.0; 

var minspeed : float = -0.25; 

var heading : float = 0.0; 

var rudder : float = 0.0; 

var rudderDelta : float = 2.0; 

var maxRudder : float = 6.0; 

var bob : float = 0.1; 

var bobFrequency : float = 0.2; 

var rb: Rigidbody; 

private var elapsed : float = 0.0; 

private var seaLevel : float = 0.0; 

private var rudderControl : GameObject; 

private var rudderAngle : float = 0.0; 

    function signedSqrt(x : float){ 

    var r = Mathf.Sqrt(Mathf.Abs(x)); 

    if(x < 0){ 

     return -r; 

    } else { 

      return r; 

    } 

} 


function Start() { 
    rb = GetComponent.<Rigidbody>(); 
} 


function Update() { 

rb.angularDrag = 0.8; 
rb.drag = 1; 

// Bobbing 

elapsed += Time.deltaTime; 

transform.position.y = seaLevel + bob * Mathf.Sin(elapsed * bobFrequency * (Mathf.PI * 2)); 

// Steering 

rudder += Input.GetAxis("Horizontal") * rudderDelta * Time.deltaTime; 

if(rudder > maxRudder){ 

    rudder = maxRudder; 

} else if (rudder < -maxRudder){ 

    rudder = -maxRudder; 
} 

heading = (heading + rudder * Time.deltaTime * signedSqrt(speed)) % 360; 

// transform.Rotate(0, rudder * Time.deltaTime, 0); 

transform.eulerAngles.y = heading; 

transform.eulerAngles.z = -rudder; 

if(rudderControl){ 

    rudderAngle = ((-60 * rudder)/maxRudder + heading) % 360; 

    //rudderControl.transform.localEulerAngles.y = (70 * rudderAngle)  %  360; 

     rudderControl.transform.eulerAngles = Vector3(0, rudderAngle, 0); 
    } 

    // Sail 

    speed += Input.GetAxis("Vertical") * acceleration * Time.deltaTime; 

    if(speed > maxspeed){ 

      speed = maxspeed; 

    }  else if (speed < minspeed){ 

     speed = minspeed; 

    } 

    transform.Translate(0, 0, speed * Time.deltaTime); 

} 

function Awake(){ 

    seaLevel = transform.position.y; 

    rudderControl = GameObject.Find("rudderControl"); 

} 

我希望這很簡單。任何幫助表示讚賞。

回答

0

我覺得這個問題可以通過使用

transform.Translate(0, 0, speed * Time.deltaTime); 

以我的經驗造成的,這是最好的補充力量的剛體。

至於車削問題,您是否曾將方向舵位置重置爲默認值?我似乎無法找到你的代碼中會發生這種情況。

希望這有助於

+0

我試過了,它並沒有影響它,但它確實幫助我縮小了問題範圍。 – user3362828

0

我能夠通過直接減慢速度變量來解決這個問題。

if (!Input.GetAxis("Vertical")) 
    { 

     if (speed > 0) 
      { 
       speed -= 0.1f; 
       if (speed < 0) 
        { 
         speed = 0; 
        } 
      } 


     if (speed < 0) 
      { 
       speed += 0.1f; 
       if (speed > 0) 
        { 
         speed = 0; 
        } 
      } 

    } 

我做了舵的同樣的事情。