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

时间:2015-12-23 22:56:40

标签: c# unity3d

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

你知道我怎么能做到这一点吗?

1 个答案:

答案 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。"这意味着"如果t1Booltrue,请将turbina1设置为2;如果t1Boolfalse,请将turbina1设置为0"。它是一种更清晰的方式,可以对您拥有的if(bool) {} else {}语句进行分组。