【问题标题】:Same prefab instantiates at different speed相同的预制件以不同的速度实例化
【发布时间】:2014-09-29 06:59:04
【问题描述】:

我正在尝试设置一个对象以在发射时以 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);
        }
    }

【问题讨论】:

  • 您可以尝试直接分配新刚体的velocity 属性,而不是调用AddForce。这避免了预先存在的速度可能影响子弹的任何情况。除此之外,您应该仔细检查所有轮换是否完全符合您的预期。
  • 旋转是正确的,速度仍然给出相同的结果。提取了这部分问题并创建了一个小的 Unity 项目文件。如果你有时间,一定要看看。保管箱链接在上面的问题中。谢谢。

标签: c# unity3d


【解决方案1】:

我下载了项目,发现顶部和左侧生成点的旋转方向错误。

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

我个人会丢失所有的旋转并使用 transform.right 等来避免混淆

【讨论】:

  • 感谢您指出。我选择将其全部向前,因为没有选项将其编码为左,向下。只有向前,向上,正确。如果有办法获得left和bottom,请提出建议。
  • 你可以简单地使用 left 和 down 方法:-transform.right 和 -transform.up
【解决方案2】:

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

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

在脚本中,建议使用 FixedUpdate 函数作为施加力和更改刚体设置的位置(与用于大多数其他帧更新任务的 Update 相对)。这样做的原因是物理更新是在与帧更新不一致的测量时间步长中执行的。 FixedUpdate 在每次物理更新之前立即调用,因此在那里所做的任何更改都将被直接处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-25
    • 2016-12-31
    • 1970-01-01
    • 2021-01-28
    • 1970-01-01
    • 2019-03-12
    相关资源
    最近更新 更多