我一直在撕扯我的头发!在Unity内部,我试图让它如此,如果玩家碰撞的对象有一个“Kill”标签,玩家重生。这变成了一项非常艰巨的任务,因为没有明显的理由这不起作用:
void OnTriggerEnter(Collider other)
{
if (other.gameObject.CompareTag("Pick Up"))
{
other.gameObject.SetActive(false);
count = count + 1;
SetCountText();
audio.Play();
}
else if (other.gameObject.CompareTag("Kill"))
{
Respawn();
}
}
似乎如果我使用除"Pick Up"
之外的任何其他标签,它根本就不会检测到它。我甚至尝试将标签反转并将它们添加到不同的对象中无济于事!
我的Respawn()
功能也正常运行。在行上方添加此内容不会向控制台发送任何内容:
Debug.Log("Respawn");
Respawn();
我也确定我正在检查脚本中的正确标记,因为我已从Unity Inspector窗口复制并粘贴它。你觉得这里有什么问题吗?
一切看起来应该可以正常工作,但事实并非如此。为什么这样,我该如何解决?
答案 0 :(得分:1)
这是一个逻辑错误。删除else语句。使用else语句,如果第一个if语句为true,则不会检查下一个if语句。
if (other.gameObject.CompareTag("Pick Up"))
{
other.gameObject.SetActive(false);
count = count + 1;
SetCountText();
audio.Play();
}
if (other.gameObject.CompareTag("Kill"))
{
Respawn();
}
修改强>:
确保带有Kill
标记的GameObject的Is Trigger
属性已选中。还要确保游戏对象附加Rigidbody
。
答案 1 :(得分:-1)
也许只需使用附加到“Kill”对象的空脚本并使用 TryGetComponent() 进行检查。 这样做:
private void OnTriggerEnter (Collider other) {
if (other.TryGetComponent<Kill>(out Kill kill)) {
// What you want do
}
}