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等在当前上下文中不存在。我不能将变量声明为静态,因为我认为它们在构造函数中。

你知道我该怎么做吗?

c#Unity3D使用切换按钮更改另一个脚本中的布尔值并返回一个和

如果您清理了类,使布尔值成为公共成员,而不是仅存在于构造函数的范围中,如:

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"。意思是"如果t1Booltrue,则将turbina1设置为2;如果t1Boolfalse,则将turbina1设置为0"。这是一种更干净的方式来对您拥有的if(bool) {} else {}语句进行分组。