返回布尔值并访问该信息

时间:2015-10-09 22:31:57

标签: c# unity3d boolean

我正在编写一个小程序。我有一些小表达式,我希望从另一个脚本访问。问题在于,当我在检查员中得到回报(这是正确的)时,另一个脚本不能识别它。根据我的研究,似乎虚函数不是函数的正确返回类型,我需要其他东西。

此外,由于我在检查员中获得了正确的回报,我认为值得一提的是,我尝试在无法识别bool的脚本上玩游戏时出现Null Ref错误

我将包含我正在使用的代码。我使用的Unity版本是5.2.1f1,64位。另外,我使用了Awake和Start。两者都没有奏效。因为我没想到那会很重要,但我想我会试一试。

我很感激帮助。

public class nonButtonStuff : MonoBehaviour
{

public float timer;
public float tipPercent;
public float checkAmount;

private Seated seated;
private dessert Dessert;
private drinks Drinks;
private food Food;
private appetisers Appetisers;
private checkedUpon checkedOn;



// Use this for initialization
void Awake()
{
    tipPercent = .2f;
    checkAmount = 0;
    seated = GetComponent<Seated>();
    Dessert = GetComponent<dessert>();
    Drinks = GetComponent<drinks>();
    Food = GetComponent<food>();
    Appetisers = GetComponent<appetisers>();
    checkedOn = GetComponent<checkedUpon>();
}

void Update()
{
          if(seated.isSeated == true  && Drinks.drinksOrdered == true || Drinks.drinksOrdered != false && seated.isSeated == false)
            {
                timer += Time.deltaTime * 1;
            }

          if(Dessert.Dessert==true)
            {
                timer = 0;
            }
            if (checkedOn.checkedOn > 0)
            {
               Debug.Log(checkedOn);
            }

    }
}

~~~~~~~~~~

public class Seated : MonoBehaviour
{

    public bool isSeated = false;

    public void clicked()
    {

        isSeated = true;
        Debug.Log("Was clicked.");
        return;
    }
}

为了清楚点击clicked()编辑:

我使用内置的UI编辑器添加一个坐着的按钮。所以,没有硬编码按钮。但是,当我&#34;玩&#34;然后单击按钮,它给我布尔值正确。但是,nonButtonStuff并没有识别出#Bes; isSeated&#34; as == true。

2 个答案:

答案 0 :(得分:1)

我认为你的问题不在于isSeated。我认为问题出在这条线的逻辑上:

if(seated.isSeated == true  && Drinks.drinksOrdered == true || Drinks.drinksOrdered != false && seated.isSeated == false)

你实际上是在说“如果是坐着,饮料订单或饮料订购而不是坐着。如果订购饮料,无论isSeated的状态如何,这将永远返回。

还有关于风格的说明。在C#中,您不需要像使用“==”那样比较布尔值。这样:

if(myBoolean){}

的代码相同
if(myBoolean == true){}

大多数人都喜欢编写更简单的代码,以减少逻辑错误的风险。因此,您的代码可以重写为

if(seated.isSeated  && Drinks.drinksOrdered || Drinks.drinksOrdered && !seated.isSeated)

if(seated.isSeated || !seated.isSeated)

总是返回true,你可以删除这些值。那就离开了你

if(Drinks.drinksOrdered || Drings.drinksOrdered)

这可以简化为

if(Drinks.drinksOrdered)

这与原始代码完全相同:

if(seated.isSeated == true  && Drinks.drinksOrdered == true || Drinks.drinksOrdered != false && seated.isSeated == false)

它更清楚。

答案 1 :(得分:0)

如果你得到一个Null引用异常,这很可能意味着你的坐着的变量(在Awake函数中设置)没有被设置为任何东西,所以对GetComponent的调用无法找到它上面的monobehaviour游戏对象。如果你的Seated Monobehavior和你的nonButtonStuff Monobehavior不存在于同一个GameObject上会发生这种情况,所以一定要确保它们存在。