C# 相同的预置以不同的速度实例化

C# 相同的预置以不同的速度实例化,c#,unity3d,C#,Unity3d,我正在尝试设置一个对象,在开火时以4种方式实例化子弹。例如: Assuming 'A' is the object: ^ | <- A -> | v 这可能是因为您正在更新方法中使用AddForce。您应该尝试改用FixedUpdate方法。它在在线文档中指出: 在脚本中,建议将“固定更新”功能用作应用力和更改刚体设置的位置(与“更新”相反,后者用于大多数其他帧更新任务)。这是因为物理更新是在测量的时间步长内执行的,与帧更新不一致。每次物理更

我正在尝试设置一个对象,在开火时以4种方式实例化子弹。例如:

Assuming 'A' is the object:

    ^
    |
<-  A  ->
    |
    v

这可能是因为您正在更新方法中使用AddForce。您应该尝试改用FixedUpdate方法。它在在线文档中指出:


在脚本中,建议将“固定更新”功能用作应用力和更改刚体设置的位置(与“更新”相反,后者用于大多数其他帧更新任务)。这是因为物理更新是在测量的时间步长内执行的,与帧更新不一致。每次物理更新之前都会立即调用FixeUpdate,因此在那里所做的任何更改都将直接处理。

我下载了该项目,并注意到顶部和左侧的点旋转方向错误

  • 左旋转应为:270(或-90)
  • 顶部旋转应为:180

就我个人而言,我会丢失所有旋转并使用transform.right等。为了避免混淆

而不是调用
AddForce
,您可以尝试直接指定新刚体的
velocity
属性。这避免了任何预先存在的速度可能影响子弹的情况。除此之外,你应该仔细检查你所有的旋转是否完全符合你的预期。旋转是正确的,速度仍然给出相同的结果。提取了问题的这一部分,并创建了一个小的Unity项目文件。如果你有时间,一定要看一看。dropbox链接在上面的问题中。谢谢,谢谢你指出。我选择将其全部向前,因为没有选项将其编码为左下。只有向前,向上,向右。如果有办法获得左下角,请给出建议。您可以通过执行:-transform.right和-transform.up简单地使用left和down
    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);
        }
    }