我有一个简单的大炮,我正在尝试编程以发射弹丸。我有4个游戏对象:
我的大炮对象代码如下:
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:
什么可能导致此行为?
答案 0 :(得分:2)
您要添加的力为pos
(乘以标量power
)...大炮的位置在y轴上大于零,因此这就是它以y偏移发射的原因。我假设它也有一个x偏移,只是不那么引人注目,因为基数(tank
)以x为中心,而它在y之上。尝试将整个储罐设置从场景根移开;由于使用pos
的错误,您可能会看到弹丸力的峰值。
您想要的是一个代表纯方向的向量。也是归一化的一个(数量级为1)。在这种情况下,从旋转的right
或up
的角度来看,tip
(向前移动2d)或cannon
。