如何检查游戏对象是否处于活动状态

时间:2021-02-22 03:19:34

标签: c# unity3d user-interface input gameobject

我正在制作一个背包,我试图让它像 Minecraft 一样,你只需按“E”,它就会打开,如果已经打开,他们就会关闭它。 Bty 我在 C# 中使用 Unity。

if (Input.GetKeyDown(backpackKey) && backpack.activeInHierarchy == false)
{
   backpack.SetActive(true);
}
if (Input.GetKeyDown(backpackKey) && backpack.activeInHierarchy == true)
{
    backpack.SetActive(false);
}

2 个答案:

答案 0 :(得分:3)

您的两个 if 条件都将匹配:

  1. 您的对象处于非活动状态
  2. 您将其设为活动状态
  3. 现在第二个条件也匹配
  4. 您再次将其设为非活动状态

要么使用 else if 使两个块都独占运行,或者..实际上你可以简单地做

if (Input.GetKeyDown(backpackKey))
{
    // I would prefer using "activeSelf"
    // If any parent is inactive your check might always return false even though the object
    // itself is already set to active. Don't know if it has an impact on performance
    // I just find it more convenient here since this is the value changed by "SetActive"
    backpack.SetActive(!backpack.activeSelf);
}

答案 1 :(得分:0)

您缺少一个 else 语句:

if (Input.GetKeyDown(backpackKey))
{
  if(backpack.activeInHierarchy == false)
  {
    backpack.SetActive(true);
  } else {
    backpack.SetActive(false);
  }
}

在您的代码中,每当您尝试打开它时,您最终都会陷入第二个条件,现在为真,并立即关闭它。