返回一个布尔值并访问该信息

本文关键字:访问 信息 布尔值 一个 返回 | 更新日期: 2023-09-27 18:17:04

我正在写一个小程序。我有一些小表达式,我正在寻找从另一个脚本访问。问题是,当我在检查器中获得返回值时(这是正确的),其他脚本不识别它。根据我的研究,似乎void不是函数的正确返回类型,我需要其他的东西。

另外,由于我在检查器中得到了正确的返回,我认为值得一提的是,在尝试在不识别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;
    }
}

为清楚地说明click()而编辑:

我使用内置的UI编辑器添加了一个按钮。所以,没有硬编码的按钮。但是,当我"播放"并点击按钮时,它会给我正确的布尔值。然而,nonButtonStuff不能识别" isseats " == true

返回一个布尔值并访问该信息

我认为你的问题不在于issitting。我认为问题出在这一行的逻辑上:

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

你实际上是在说"如果已经就座,已经点了饮料,或者已经点了饮料,没有就座。"如果点了饮料,无论issitting的状态如何,该函数都会返回true。

还有一个关于风格的注意事项。在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)

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