为什么我的标签不起作用?

时间:2016-08-06 16:37:03

标签: c# unity3d

我一直在撕扯我的头发!在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窗口复制并粘贴它。你觉得这里有什么问题吗?

Inspector Window

此外,以下是我的obbject中RigidBody的设置: RigidBody

一切看起来应该可以正常工作,但事实并非如此。为什么这样,我该如何解决?

2 个答案:

答案 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
    }
}