弹丸轨迹略微偏离 Unity2D

Trajectory of projectile slightly off Unity2D

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

我的大炮代码object如下:

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-axis 瞄准时的弹道。施加的力仍然有一个小的 y 分量,这是我没有预料到的,也是我不希望的。

这是一个 gif:

是什么导致了这种行为?

您添加的力是 pos(乘以标量 power)...您的大炮在 y 轴上的位置高于零,因此它以 y 发射抵消。我假设它也有一个 x 偏移量,只是不太明显,因为基数 (tank) 以 x 为中心,而它在 y 的中心上方。尝试将整个坦克设置从场景根部移开;由于使用 pos.

的错误,您可能会看到射弹的力量出现巨大的峰值

你想要的是一个表示纯方向的向量。一个也是 标准化 (1 的量级)。在这种情况下,从旋转tipcannon.

的角度来看,要么right(在2d中前进)要么up