玩家移动时不射击弹丸

时间:2019-05-05 18:06:50

标签: c# unity3d

当我射击并且玩家静止不动时,弹丸工作正常,但是当我移动或向前跳跃时,弹丸不起作用。

我认为这是由于我的项目符号代码而发生的。我是Unity的初学者,所以我认为代码有问题。

void Update()
{
    transform.Translate(Vector3.right * speed * Time.deltaTime);
}

private void OnTriggerEnter2D(Collider2D other)
{
    Destroy(gameObject);
}

1 个答案:

答案 0 :(得分:1)

我敢肯定,我知道您为什么会遇到此问题,但我将花一些时间向您展示如何在将来进行调试。

因此,您说的是“弹丸不起作用”,这实际上没有任何意义,但我认为它的意思是“它们不产生”。

这可能是由于两个原因:

  1. 某种原因阻止了它们的产生
  2. 它们被立即删除

在我们的例子中,它可能是2号。当您向前移动时,玩家会立即与自己的弹丸相撞,从而使其消失。

要确保是这种情况,您可以通过编辑碰撞代码来检查导致删除的对象:

private void OnTriggerEnter2D(Collider2D other)
{
    Debug.Log(other.name);
    Destroy(gameObject);
}

可能是玩家,所以您不希望玩家与自己的子弹相撞。您可以通过两种方式解决此问题:

  1. 检查碰撞时,将“销毁”置于条件语句中,例如:if (other.tag != "Player")
  2. 在子弹上添加一层,并防止该层与玩家的层碰撞。
  3. 使用Physics.IgnoreCollision(MyCollider, PlayerCollider);(或Physics2D,如果是2D)在Start()方法中排除子弹与玩家之间的碰撞

为简单起见/解决您的问题,让我们从数字1开始;将您的碰撞代码修改为有条件的:

private void OnTriggerEnter2D(Collider2D other)
{
    if (other.tag != "Player") 
    {
        Destroy(gameObject);
    }
}

然后转到播放器对象并创建一个名为“ Player”的新图层,并将其分配给播放器对象。