我在playstate.cs中有这个界面按钮:
HydroElectric.t1Bool = GUI.Toggle (new Rect (25, 55, 100, 50), HydroElectric.t1Bool, "Turbina 2 MW");
HydroElectric.t2Bool = GUI.Toggle (new Rect (25, 95, 100, 50), HydroElectric.t2Bool, "Turbina 3 MW");
HydroElectric.t3Bool = GUI.Toggle (new Rect (25, 135, 100, 50), HydroElectric.t3Bool, "Turbina 1 MW");
还有这个方框:
GUI.Box (new Rect (Screen.width - 100, 60, 80, 25), HydroElectric.prod.ToString ());
然后我有这个HydroElectric.cs脚本,如果条件被验证可以改变名为 prod 的SUM的值:
using UnityEngine;
namespace Assets.Code.PowerPlants
{
public class HydroElectric
{
public HydroElectric ()
{
bool t1Bool = true;
bool t2Bool = true;
bool t3Bool = false;
float prod = 0;
int turbina1;
int turbina2;
int turbina3;
}
public void HydroControlPanel (bool t1Bool, bool t2Bool, bool t3Bool, int turbina1, int turbina2, int turbina3, float prod)
{
if (t1Bool == true)
{
turbina1 = 2;
}
else
{
turbina1 =0;
}
if (t2Bool == true)
{
turbina2 = 3;
}
else
{
turbina2 =0;
}
if (t3Bool == true)
{
turbina3 = 1;
}
else
{
turbina3 =0;
}
prod = turbina1 + turbina2 + turbina3;
}
}
}
我想我必须通过创建一个新变量并在playstate中使用new方法初始化Hydroelectric类,并在HydroControlPanel方法中为变量prod创建一个返回但是我很难理解这个并将其与toogle按钮结合使用。
点语法也不起作用,因为控制台说当前上下文中不存在t1Bool等。我不能将变量声明为静态,因为它们在我认为的构造函数中。
你知道我怎么能做到这一点吗?
答案 0 :(得分:1)
如果你清理了你的类,那么布尔值是公共成员,而不是只存在于构造函数的范围内,如下所示:
using UnityEngine;
namespace Assets.Code.PowerPlants
{
public class HydroElectric
{
public bool t1Bool;
public bool t2Bool;
public bool t3Bool;
int turbina1;
int turbina2;
int turbina3;
float prod;
public HydroElectric ()
{
t1Bool = true;
t2Bool = true;
t3Bool = false;
prod = 0f;
}
然后,您可以创建一个实例HydroElectric ec = new HydroElectric();
并使用点ec.t1Bool
访问该实例的布尔值。
然后,您可以修改HydroControlPanel()
功能以返回float
而不是存储它(当然,如果您愿意,您可以像下面这样做,但问题的范围并不是#39; t清楚说明你想要的东西。
public float HydroControlPanel ()
{
turbina1 = t1Bool ? 2 : 0;
turbina2 = t2Bool ? 3 : 0;
turbina3 = t3Bool ? 1 : 0;
prod = turbina1 + turbina2 + turbina3;
return prod;
}
}
}
现在,当布尔值发生变化时,您可以调用HydroControlPanel()
并重新评估它prod
并返回新值。
注意,这句语法:
turbina1 = t1Bool ? 2 : 0;
是一个三元运算符(有3个参数),可以称为"在线if。"这意味着"如果t1Bool
是true
,请将turbina1
设置为2;如果t1Bool
为false
,请将turbina1
设置为0"。它是一种更清晰的方式,可以对您拥有的if(bool) {} else {}
语句进行分组。