Unity对撞机触发不起作用

时间:2018-06-05 12:46:13

标签: c# unity3d unityscript game-development

我之前做过很多碰撞器并且我使用的是(对撞机其他OnTriggerEnter(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");并且它被触发。

我无法理解错误。请帮帮我。

2 个答案:

答案 0 :(得分:1)

首先仔细检查你的敌人游戏对象是否有标记&#34; Enemy&#34;。接下来确保你的玩家对撞机具有&#34; Is Trigger&#34;在Unity检查器中选择的选项。

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

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

希望这有帮助!

答案 1 :(得分:0)

我能给您的第一条建议就是,在编写代码Debug时,始终要确保代码中的每个步骤都在执行。在每个if内,只要调试应该检查的内容以及是否为true,在您的void内,确保其运行该void等。

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

-如果需要,您也可以使用colliders,这也向您展示了如何检查标签。

确保对所有设置进行了设置,如果这样做没有帮助,请在下面用打印,您的游戏对象,代码等与此相关的注释,对此进行注释。