如何检查gameObject是否活动



我正在制作一个背包,我想让它像《我的世界》一样,你只要按下"E"它会打开,如果它已经打开了,他们就会关上它。我在c#中使用Unity。

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

两个if条件将匹配:

  1. 你的对象是不活动的
  2. 设置为活动
  3. 现在第二个条件也匹配
  4. 再次设置为非活动

使用else if使两个block运行exclusive或. .实际上你可以直接输入

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);
}

您缺少一个else语句:

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

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

最新更新