2016-10-11 34 views
0

當我按下左箭頭時我想縮小精靈並且當我按右箭頭時我想放大精靈。我製作了這個代碼,它的工作原理非常快速。如果我按下按鈕1秒鐘,它可以擴展到100萬次。我究竟做錯了什麼? scalingSpeed就像0.0001,但它仍然很快瘋狂。通過按下按鈕來縮放精靈

if(Input.GetKey (KeyCode.LeftArrow)) { 
    this.transform.localScale -= new Vector3 (this.transform.localScale.x - scalingSpeed, this.transform.localScale.y - scalingSpeed, 0); 
} else if (Input.GetKey (KeyCode.RightArrow)) { 
    this.transform.localScale += new Vector3 (this.transform.localScale.x - scalingSpeed, this.transform.localScale.y - scalingSpeed, 0); 
} 
+0

您是否能夠找到解決問題的方法?如果給出的答案不能提供您所需的答案,請在此處添加評論或編輯您的問題以進行澄清。謝謝! – Serlite

回答

1

這裏的問題是,你的縮放代碼不線性改變精靈的localScale - 它實際上指數!考慮以下幾點:

localScale += new Vector3 (localScale.x - scalingSpeed, localScale.y - scalingSpeed, 0); 

翻譯爲:

localScale = localScale + new Vector3 (localScale.x - scalingSpeed, localScale.y - scalingSpeed, 0); 

這意味着每幀,你不加入scalingSpeed一個矢量相等價值localScale - 要添加的差異之間的localScalescalingSpeedlocalScale,這要大得多(幾乎翻倍localScale每幀)。

使用+=和更改localScale的每個組件都是多餘的。我的建議?不要從localScale每個組件減scalingSpeed - 相反,與Vector3.one相乘,並添加/減去代替:

if(Input.GetKey (KeyCode.LeftArrow)) { 
    this.transform.localScale -= Vector3.one * scalingSpeed; 
} else if (Input.GetKey (KeyCode.RightArrow)) { 
    this.transform.localScale += Vector3.one * scalingSpeed; 
} 

希望這有助於!如果您有任何問題,請告訴我。