首页 > 解决方案 > 玩家在移动时不要发射弹丸

问题描述

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

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

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

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

标签: c#unity3d

解决方案


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

所以你说“射弹不起作用”这并没有任何意义,但我认为它的意思是“它们不会产生”。

这可能是由于两个原因:

  1. 有些东西阻止它们产卵
  2. 他们立即被删除

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

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

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

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

  1. 检查碰撞时,将 Destroy 放入条件语句中,例如:if (other.tag != "Player")
  2. 将图层添加到子弹并防止该图层与玩家的图层发生碰撞。
  3. Physics.IgnoreCollision(MyCollider, PlayerCollider);在 Start() 方法中使用(或 Physics2D,如果是 2D)排除子弹和玩家之间的碰撞

为了简单起见/解决您的问题,让我们选择数字 1;将您的碰撞代码编辑为有条件的:

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

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


推荐阅读