Unity collider OnTriggerEnter 没有被调用

Unity collider OnTriggerEnter not getting called

我之前做了很多colliders,我用的是(collider otherOnTriggerEnter(collider other))然后通过比较检查另一个collider是不是我想要的标签。但这次我没有触发 canMelee 布尔值。我的代码:

ArrayList Enemy;
public StatData stat;

[SerializeField]
private bool canMelee = false;

/// <summary>
/// OnTriggerEnter is called when the Collider other enters the trigger.
/// </summary>
/// <param name="other">The other Collider involved in this collision.</param>
void OnTriggerEnter(Collider col)
{
    if (col.tag == "Enemy")
    {
        Debug.Log("Now you can do melee attack!");
        canMelee = true;
    }
}

所以我写了这段代码,但不知何故这不起作用我检查了标签并将其添加到玩家游戏对象,但它仍然不起作用。

我尝试添加另一个调试来检查 OnTriggerEnter() 是否发生在 if 分支的正上方:Debug.Log("Triggered"); 它被触发了。

我想不通哪里出了问题。请帮助我。

首先仔细检查你的敌人游戏对象是否有标签 "Enemy"。接下来确保您的玩家碰撞器在 Unity 检查器中选择了 "Is Trigger" 选项。

接下来尝试使用 col.gameObject.CompareTag("Enemy") 而不是:col.tag == "Enemy" 在你的 if 语句中。

查看关于 Colliders 的 Unity 文档: Unity Collider documentation Unity Component.CompareTag method with example

希望对您有所帮助!

我能给你的第一个建议是,在编写代码时 Debug 始终确保代码中的每一步都被执行。在每个 if 内部,如果只是调试它应该检查的内容,如果它是真的,在你的 void 内部,确保它的 运行 是 void,等等......

下一个: - 检查你的对象是否被标记为 "Enemy",这可能是最常见的错误之一,它很容易解决,你可能写错了,或者只是没有设置它。 -这里是触发器文档documentation。 -在此之后,确保您的 gameobjecttriggered.

的市场

-如果你想你也可以使用colliders,这也告诉你如何检查标签。

确保你设置了所有这些,如果这对你没有帮助,请在下面评论,打印,你的游戏对象,代码等与此相关。