C#if条件触发,如果项在层次结构中处于非活动状态

时间:2018-10-29 11:11:26

标签: c# unity3d

我有一个简单的脚本,该脚本显示一个UI提示,并在退出我编写的对撞机时消失,并且如果该项目处于非活动状态,则if语句也会禁用文本,因为当玩家拿起该项目时,该项目被设置为非活动状态但UI元素仍然存在。

public Text PickUpText;

void Update()
{
    if (!gameObject.activeSelf)
    {
        PickUpText.gameObject.SetActive(false);
    }
}

public void OnTriggerEnter2D(Collider2D collision)
{
    if (collision.CompareTag("Player"))
    {
        PickUpText.gameObject.SetActive(true);
    }
}
public void OnTriggerExit2D(Collider2D collision)
{
    if (collision.CompareTag("Player"))
    {
        PickUpText.gameObject.SetActive(false);
    }
}

2 个答案:

答案 0 :(得分:3)

如果要在禁用对象时调用代码,则应使用OnDisable()。不能在禁用的对象上调用Update()方法。

答案 1 :(得分:3)

如果游戏对象未激活,则不会调用您的更新方法。您需要使用 OnDisable 方法。

public Text PickUpText;

void OnDisable()
{
    PickUpText.gameObject.SetActive(false);
}

public void OnTriggerEnter2D(Collider2D collision)
{
    if (collision.CompareTag("Player"))
    {
        PickUpText.gameObject.SetActive(true);
    }
}
public void OnTriggerExit2D(Collider2D collision)
{
    if (collision.CompareTag("Player"))
    {
        PickUpText.gameObject.SetActive(false);
    }
}