【问题标题】:c# Unity3D Using toggle button to change boolean in another script and return a sumc# Unity3D 使用切换按钮更改另一个脚本中的布尔值并返回一个总和
【发布时间】:2015-12-24 07:17:52
【问题描述】:

我的 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 方法来初始化 Hydroelectric 类,并在 HydroControlPanel 方法中为变量 prod 创建一个返回值,但我无法理解这一点并将其与工具按钮结合起来。

点语法也不起作用,因为控制台说当前上下文中不存在 t1Bool 等。我不能将变量声明为静态,因为它们在我认为的构造函数中。

你知道我怎样才能完成这项工作吗?

【问题讨论】:

    标签: c# unity3d


    【解决方案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 而不是存储它(当然,如果您愿意,您可以随时像下面那样做,但您的问题范围并不清楚哪个你想要)。

            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个参数),可以称为“in-line if”。这意味着“如果t1Booltrue,则将turbina1 设置为2;如果t1Boolfalse,则将turbina1 设置为0”。这是对您拥有的 if(bool) {} else {} 语句进行分组的一种更简洁的方式。

    【讨论】:

    • 谢谢,你太棒了,我认为我的toogle按钮声明还不正确,但你给了我很大的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-24
    • 1970-01-01
    • 2011-12-25
    • 1970-01-01
    • 2014-08-16
    • 1970-01-01
    相关资源
    最近更新 更多