相同的预制实例在不同的速度

问题描述:

我试图设置一个对象来实例化子弹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

我下载了该项目,并注意到顶部&左侧的生成点被错误地旋转了。

  • 左旋转应该是: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

这可能是因为您在更新方法使用AddForce。您应该尝试使用FixedUpdate方法。

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

在脚本中,FixedUpdate功能被推荐为申请力量和改变刚体设置(与更新,这是用于大多数其他帧更新的地方:它的在线文档在规定任务)。原因是物理更新是按照与帧更新不一致的测量时间步骤执行的。在每次物理更新之前立即调用FixedUpdate,因此所做的任何更改都将直接进行处理。

+0

修复更新提供相同的问题。 – kar 2014-09-27 08:46:03