Unity对撞机触发不起作用

问题描述 投票:-2回答:2

我之前制作了很多碰撞器,我使用的是(对撞机otherOnTriggerEnter(collider other)),然后通过比较TAG检查另一个碰撞器是否是我想要的碰撞器。但这次我没有触发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");并且它被触发。

我不能只说出错了什么。请帮我。

c# unity3d unityscript game-development
2个回答
1
投票

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

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

查看Unity文档以及碰撞器:Unity Collider documentation Unity Component.CompareTag method with example

希望这可以帮助!


0
投票

我可以给你的第一个建议是,总是,在编写代码Debug时,只需要确保代码中的每一步都被执行。在每一个内部,只要调试它应该检查的内容,如果它是真的,在你的虚空内,确保它运行虚空等...

下一步: - 如果你的对象被标记为“敌人”,这可能是最常见的错误,它很容易解决,你可能写错了,或者只是没有设置它。 - 这是触发器文档documentation。 - 在此之后,确保您的gameobject市场为triggered

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

确保你设置了所有这一切,如果这对你没有帮助,请注意,打印,你的游戏对象,代码等与此相关。

© www.soinside.com 2019 - 2024. All rights reserved.