2014-09-26 67 views
0

我試圖設置一個對象來實例化子彈4種方式時發射。例如如下:相同的預製實例在不同的速度

Assuming 'A' is the object: 

    ^
    | 
<- A -> 
    | 
    v 

我試圖設置它在上面指定的方向上拍攝4種方式。當前設置工作正常並且預製在方向上正確實例化。問題並非都以相同的速度發射。右邊和底部的拍攝正確,而頂部和左邊的拍攝方式較慢。

代碼設置對於所有方向都完全相同,並且它們都使用相同的預製和相同的速度,因此混淆了速度差異。請指教。謝謝。

Dropbox link to project

public Rigidbody bulletPrefab; 
    //empty gameobjects to locate the positions 
    public Transform bulletStartPosRight, bulletStartPosLeft, bulletStartPosTop, bulletStartPosBottom; 
    private float bulletSpeed = 300; 

    // Update is called once per frame 
    void Update() 
    { 
     if (Input.GetButtonDown("Fire1")) 
     { 
      Rigidbody bulletInstance1, bulletInstance2, bulletInstance3, bulletInstance4; 

      bulletInstance1 = Instantiate(bulletPrefab, bulletStartPosRight.position, bulletStartPosRight.rotation) as Rigidbody; 
      //the force is always forward. I rotated the empty gameobjects in Unity instead of changing the code here to forward,up,right and so on. 
      bulletInstance1.AddForce(bulletStartPosRight.forward * bulletSpeed); 

      bulletInstance2 = Instantiate(bulletPrefab, bulletStartPosLeft.position, bulletStartPosLeft.rotation) as Rigidbody; 
      bulletInstance2.AddForce(bulletStartPosLeft.forward * bulletSpeed); 

      bulletInstance3 = Instantiate(bulletPrefab, bulletStartPosTop.position, bulletStartPosTop.rotation) as Rigidbody; 
      bulletInstance3.AddForce(bulletStartPosTop.forward * bulletSpeed); 

      bulletInstance4 = Instantiate(bulletPrefab, bulletStartPosBottom.position, bulletStartPosBottom.rotation) as Rigidbody; 
      bulletInstance4.AddForce(bulletStartPosBottom.forward * bulletSpeed); 
     } 
    } 
+0

與其調用'AddForce',您可能會嘗試直接指定新的剛體的'velocity'屬性。這避免了現有速度可能影響子彈的情況。除此之外,你應該仔細檢查你所有的旋轉是否與你期望的一樣。 – rutter 2014-09-26 22:55:12

+0

旋轉是正確的,速度仍然給出相同的結果。提取這部分問題並創建一個小的Unity項目文件。如果你有時間,請看一看。 Dropbox鏈接位於上面的問題中。謝謝。 – kar 2014-09-27 09:03:20

回答

0

我下載了該項目,並注意到頂部&左側的生成點被錯誤地旋轉了。

  • 左旋轉應該是:270(或-90°)
  • 頂部旋轉應該是:180

個人我會失去所有的旋轉,並使用transform.right等以避免混淆

+0

謝謝你指出。我選擇將它全部轉發,因爲沒有選擇將它編碼爲左,下。只有前進,向上,正確。如果有辦法獲取左側和底部,請諮詢。 – kar 2014-09-29 08:44:40

+0

你可以簡單地使用left和down:-transform.right和-transform.up – 2014-10-01 16:05:51

0

這可能是因爲您在更新方法使用AddForce。您應該嘗試使用FixedUpdate方法。

http://docs.unity3d.com/ScriptReference/Rigidbody.html

在腳本中,FixedUpdate功能被推薦爲申請力量和改變剛體設置(與更新,這是用於大多數其他幀更新的地方:它的在線文檔在規定任務)。原因是物理更新是按照與幀更新不一致的測量時間步驟執行的。在每次物理更新之前立即調用FixedUpdate,因此所做的任何更改都將直接進行處理。

+0

修復更新提供相同的問題。 – kar 2014-09-27 08:46:03

相關問題