【问题标题】:How to check if my Bool value is true in unity c#?如何在统一 c# 中检查我的 Bool 值是否为真?
【发布时间】:2019-11-04 08:57:29
【问题描述】:

我使用 unity 2018 并使用 c# 我想检查我的布尔值是否为真。这是 我的代码:

public class ShopButtonClick : MonoBehaviour 
{
    bool shopOpened = false;
    public GameObject upgradeOne;

    public void ClickTheButton()
    {
        if (shopOpened)
        {
            shopOpened = false;
            upgradeOne.SetActive(false);
        }
        else

        shopOpened = true;
        upgradeOne.SetActive(true);
    }
}

问题是它不起作用,我将脚本添加到按钮中但它不起作用,在我的其他项目上它工作正常......但由于某种原因现在不行。

【问题讨论】:

  • 有什么问题?
  • 如果 (shopOpened) .. 您可能需要在 else 周围加上括号...
  • 如果您写的不是“它不起作用”,而是“我不明白为什么upgradeOne 保持活跃,那么这个问题将是一个很好的问题不管我点击按钮的次数“ -​​ 这是您的代码的预期行为(因为每次都会执行upgradeOne.SetActive(true))。

标签: c# unity3d boolean


【解决方案1】:

你缺少括号:

if (shopOpened)
{
    shopOpened = false;
    upgradeOne.SetActive(false);
}
// without brackets the else only applies to the first line of code after it
else
    shopOpened = true;

// This is always executed
upgradeOne.SetActive(true);

你想要的大概是

if (shopOpened)
{
    shopOpened = false;
    upgradeOne.SetActive(false);
}
else
{
    shopOpened = true;
    upgradeOne.SetActive(true);
}

其实我更愿意写成这样

public void ClickTheButton()
{
    // invert the bool flag
    shopOpened = !shopOpened;
    // directly re-use its value
    upgradeOne.SetActive(shopOpened);
}

【讨论】:

    【解决方案2】:

    else 后面缺少一个大括号。

    虽然您可以编写不带括号的 if/else 语句,但只有 else 之后的第一行将被视为 else 语句的归属。 在您的情况下,这意味着 upgradeOne.SetActive(true); 将始终被执行,因为它将被解释为。

    if (shopOpened)
        {
    
            shopOpened = false;
            upgradeOne.SetActive(false);
        }
        else
        {
            shopOpened = true;
        }
    
        upgradeOne.SetActive(true);
    

    我总是会添加括号来完全防止这种错误。

    【讨论】:

      猜你喜欢
      • 2016-02-10
      • 2016-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-17
      • 2021-08-05
      相关资源
      最近更新 更多