返回一个布尔值并访问该信息
本文关键字:访问 信息 布尔值 一个 返回 | 更新日期: 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单行为不存在于同一个游戏对象上,就会发生这种情况,所以要确保它们存在。