我正在编写一个小程序。我有一些小表达式,我希望从另一个脚本访问。问题在于,当我在检查员中得到回报(这是正确的)时,另一个脚本不能识别它。根据我的研究,似乎虚函数不是函数的正确返回类型,我需要其他东西。
此外,由于我在检查员中获得了正确的回报,我认为值得一提的是,我尝试在无法识别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。
答案 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上会发生这种情况,所以一定要确保它们存在。