如何检查游戏对象是不是处于活动状态
Posted
技术标签:
【中文标题】如何检查游戏对象是不是处于活动状态【英文标题】: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打开它,它什么也不做。关闭它可以正常工作。 【参考方案1】:你的两个 if 条件都会匹配:
-
您的对象处于非活动状态
您将其设置为活动状态
现在第二个条件也匹配
您再次将其设置为非活动状态
要么使用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);
在您的代码中,每当您尝试打开它时,您最终都会陷入第二个条件,现在为真,并立即关闭它。
【讨论】:
以上是关于如何检查游戏对象是不是处于活动状态的主要内容,如果未能解决你的问题,请参考以下文章