【问题标题】:How to check if the gameObject is active or not如何检查游戏对象是否处于活动状态
【发布时间】:2021-05-24 08:05:41
【问题描述】:

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

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

【问题讨论】:

  • 那么这段代码有什么问题?
  • 它不起作用。每次按e打开它,它什么也不做。关闭它可以正常工作。

标签: c# unity3d user-interface input gameobject


【解决方案1】:

你的两个 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);
}

【讨论】:

    【解决方案2】:

    您缺少else 声明:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-11
      • 2019-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多