Как проверить, истинно ли мое значение Bool в единице c #? - PullRequest
0 голосов
/ 04 ноября 2019

Я использую Unity 2018 и C #, я хочу проверить, верно ли мое значение bool. это мой код:

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

проблема в том, что он не работает, я добавил скрипт к кнопке, и он не будет работать, на моем другом проекте он работает нормально ... но по какой-то причине не сейчас.

Ответы [ 2 ]

7 голосов
/ 04 ноября 2019

Вам не хватает скобок:

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);
}
1 голос
/ 04 ноября 2019

вам не хватает фигурных скобок после else.

Хотя вы можете написать оператор if / else без скобок, только первая строка после else будет считаться принадлежностью к оператору else. В вашем случае это означает, что upgradeOne.SetActive(true); всегда будет отменено, потому что оно будет интерпретироваться как.

if (shopOpened)
    {

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

    upgradeOne.SetActive(true);

Я бы всегда добавлял скобки, чтобы точно предотвратить ошибки такого рода.

...