我之前做过很多碰撞器并且我使用的是(对撞机其他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");
并且它被触发。
我无法理解错误。请帮帮我。
答案 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,这也向您展示了如何检查标签。
确保对所有设置进行了设置,如果这样做没有帮助,请在下面用打印,您的游戏对象,代码等与此相关的注释,对此进行注释。