我正在制作我的第一个游戏,但我无法使用切换按钮更新bool值。
这是按钮:
using UnityEngine;
using Assets.Code.Interfaces;
using Assets.Code.Scripts;
using Assets.Code.PowerPlants;
namespace Assets.Code.States
public void ShowIt()
{
HydroElectric.t1Bool = GUI.Toggle (new Rect (25, 55, 100, 50), HydroElectric.t1Bool, "Turbina 2 MW");
GUI.Box (new Rect (Screen.width - 100, 60, 80, 25), HydroElectric.prod.ToString ()); // PRODUCED ENERGY
}
这是我有if条件的地方:
using System;
namespace Assets.Code.PowerPlants
public class HydroElectric
{
public static bool t1Bool = true;
public int turbina1;
public static float prod = 0;
public HydroElectric ()
{
if (t1Bool == true)
{
turbina1 = 2;
}
else
{
turbina1 =0;
}
prod = turbina1;
}
}
我在控制台上没有错误,bool值正在改变(我使用了debug)但是turbina1的值没有改变(当我从第一个脚本调试它时)。我不知道为什么它的价值不会随真假情况而改变。有什么想法吗?
答案 0 :(得分:1)
在HydroElectric
类中,构造函数在创建对象时获取t1Bool
的值,并使用它来计算prod
的值。在此之后,当prod
的值发生变化时,代码中的任何内容都不会更改t1Bool
的值。
您可以在每次阅读时从prod
的值计算t1Bool
,而不是设置值:
public class HydroElectric
{
public static bool t1Bool = true;
public static float prod
{
get
{
return t1Bool ? 2f : 0f;
}
}
}
或者,只要prod
的值发生变化,您就可以设置t1Bool
的值:
public class HydroElectric
{
private static bool _t1Bool = true;
public static bool t1Bool
{
get { return _t1Bool; }
set
{
_t1Bool = value;
prod = value ? 2f : 0f;
}
}
public static float prod = 2f;
}
这稍微快一些,但只有在你经常检查prod
的值时才能有所作为。
还有其他方法可以响应更改状态,包括事件处理程序和隐式通知程序列表。请记住,如果你想要发生某些事情,你必须 make 它发生,并且分配一个值类型(简单的事情,如数字和布尔值以及复杂的struct
类型)赢得了#39 ;随着时间的推移不断更新它们。
答案 1 :(得分:1)
您的bool条件在构造函数中执行,这意味着!
将无效,因为HydroElectric.t1Bool
在实例化时已设置turbina1
。将你的bool条件放在一个单独的方法中,并从你的脚本中调用它。