尽管明显发生了碰撞,但OnCollisionEnter2D仍未激活

时间:2018-10-16 22:54:47

标签: c# visual-studio unity3d

我正在开发一种平台游戏,其中的主要机制之一是,当您从底部击中敌人(或按照代码中实际实施的方式用您的顶部击中敌人)时,他们会失去健康。显然,在奔跑时,玩家角色和敌人角色确实会发生冲突,因为它们相互影响。但是,我用来获取效果的OnCollisionEnter2D倾向于不同意,因为当我使用它们时没有任何效果发生。这是它的当前代码:

void OnCollisionEnter2D(Collision collision)
{
    if (collision.collider.gameObject.layer == 10)
    {
        print("yeet");  //debug text

        if (hitEnemy == true)
            collision.collider.gameObject.GetComponent<EnemyMove01>().health -= 1;
        else
            health -= 1;
    }
}

我尝试过:

  • 在“碰撞”中添加和删除“ .collider”。行。

  • 在同一行中添加和删除“ .gameObject”。

  • 同时使用图层和标签进行检查。

  • 同时使用了层名称和层号进行检查。

  • 为“健康-= 1”删除外部it语句execpt中的所有内容,并使用调试文本查看问题是否与hitEnemy的工作方式有关(显然没有)。

    < / li>
  • 同时使用OnCollisionEnter和OnCollisionEnter2D。

  • 检查了对撞机矩阵。

  • 将敌人的类型更改为“静态”。

  • 检查“触发器是否已激活”(当前未激活)。

我将不胜感激。如果您认为有帮助,我也愿意发布任何其他内容(代码的其他部分,BoxCollider2D / RigidBody2D内容)。

更新:我已经编辑了代码并解决了上述问题,但是现在,即使我的角色没有被击中,敌人的角色也会在我运行时立即消失。这是当前代码:

void OnCollisionEnter2D(Collision2D collision)
{
    if (collision.collider.gameObject.tag == "Enemies")
    {
        print("yeet");  //debug text

        if (hitEnemy == true)
            collision.collider.gameObject.GetComponent<EnemyMove01>().health -= 1;
        else
            health -= 1;
    }
}

由于可能是因为hitEnemy始终为true,所以这是激活代码:

hitEnemy = Physics2D.OverlapCircle(attackpos.position, attackRange, whatisEnemies);

attackRange为0.5,而Attackpos则附加在玩家角色上方的游戏对象上(如果您认为有帮助,可以获取屏幕截图)。 whatisEnemies是设置为“敌人”层的图层蒙版。

更新2:提出第二个问题是因为我忘记了输入敌人的健康信息。糟糕!

0 个答案:

没有答案