玩家移动时不射击弹丸

新书程序员

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

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

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

private void OnTriggerEnter2D(Collider2D other)
{
    Destroy(gameObject);
}
弗雷德里克·尼斯

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

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

这可能是由于两个原因:

  1. 某些东西阻止了它们的产生
  2. 它们被立即删除

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

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

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

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

  1. 检查碰撞时,将Destroy放入条件语句中,例如: 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”的新图层,并将其分配给播放器对象。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章