我之前制作了很多碰撞器,我使用的是(对撞机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");
并且它被触发。
我不能只说出错了什么。请帮我。
首先仔细检查你的敌人游戏对象是否有“Enemy”标签。接下来确保您的播放器对撞机在Unity检查器中选择了“Is Trigger”选项。
接下来尝试在if语句中使用col.gameObject.CompareTag("Enemy")
而不是:col.tag == "Enemy"
。
查看Unity文档以及碰撞器:Unity Collider documentation Unity Component.CompareTag method with example
希望这可以帮助!
我可以给你的第一个建议是,总是,在编写代码Debug
时,只需要确保代码中的每一步都被执行。在每一个内部,只要调试它应该检查的内容,如果它是真的,在你的虚空内,确保它运行虚空等...
下一步: - 如果你的对象被标记为“敌人”,这可能是最常见的错误,它很容易解决,你可能写错了,或者只是没有设置它。 - 这是触发器文档documentation。 - 在此之后,确保您的gameobject
市场为triggered
。
- 如果你想要,你也可以使用colliders,这也告诉你如何检查标签。
确保你设置了所有这一切,如果这对你没有帮助,请注意,打印,你的游戏对象,代码等与此相关。