c#Unity3D使用切换按钮更改另一个脚本中的布尔值并返回一个和
本文关键字:返回 布尔值 一个 按钮 脚本 另一个 c#Unity3D | 更新日期: 2023-09-27 18:27:51
我的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;
}
}
}
我想我必须通过创建一个新变量并在播放状态中使用new方法来初始化Hydropolic类,还必须在HydroControlPanel方法中为变量prod创建一个返回,但我很难理解这一点,并将其与toogle按钮相结合。
此外,dot语法也不起作用,因为控制台说t1Bool等在当前上下文中不存在。我不能将变量声明为静态,因为我认为它们在构造函数中。
你知道我该怎么做吗?
如果您清理了类,使布尔值成为公共成员,而不是仅存在于构造函数的范围中,如:
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
,而不是存储它(当然,如果您愿意,您可以像下面这样同时执行这两项操作,但问题的范围并不能明确您想要哪个)。
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 {}
语句进行分组。