略微偏离Unity2D

时间:2019-02-26 03:28:22

标签: unity3d projectile

我有一个简单的大炮,我正在尝试编程以发射弹丸。我有4个游戏对象:

  • 坦克对象
  • 枢轴对象(坦克的孩子)
  • 加农炮对象(枢轴的子对象)
  • 一个名为Tip的空GameObject,它位于大炮(大炮的子代)上方

我的大炮对象代码如下:

public class cannon: MonoBehaviour
{ 
    public float power = 1.0f;
    public Transform projectile;

    void Update()
    {
        if (Input.GetButtonDown("Fire1"))
        {
            Transform bullet;
            Vector2 pos = transform.GetChild(0).position;
            bullet = Instantiate(projectile, pos, Quaternion.identity);
            Rigidbody2D bullet_rb = bullet.GetComponent<Rigidbody2D>();
            bullet_rb.AddForce(pos * power);
        }
    }
}

一切似乎都行得通,直到我看着加农炮直接沿x轴瞄准时的弹丸轨迹。施加的力中仍然有一个小的y分量,这是我没想到也不想得到的。

这是一个gif:

enter image description here

什么可能导致此行为?

1 个答案:

答案 0 :(得分:2)

您要添加的力为pos(乘以标量power)...大炮的位置在y轴上大于零,因此这就是它以y偏移发射的原因。我假设它也有一个x偏移,只是不那么引人注目,因为基数(tank)以x为中心,而它在y之上。尝试将整个储罐设置从场景根移开;由于使用pos的错误,您可能会看到弹丸力的峰值。

您想要的是一个代表纯方向的向量。也是归一化的一个(数量级为1)。在这种情况下,从旋转的rightup的角度来看,tip(向前移动2d)或cannon