Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带bool的Unity3D if条件无法将变量值发送到另一个脚本c#_C#_Unity3d - Fatal编程技术网

带bool的Unity3D if条件无法将变量值发送到另一个脚本c#

带bool的Unity3D if条件无法将变量值发送到另一个脚本c#,c#,unity3d,C#,Unity3d,我正在制作我的第一个游戏,我在使用切换按钮更新布尔值时遇到了问题 这是按钮: using UnityEngine; using Assets.Code.Interfaces; using Assets.Code.Scripts; using Assets.Code.PowerPlants; namespace Assets.Code.States public void ShowIt() { HydroElectric.t1Bool = GUI.Toggle (new Rect (2

我正在制作我的第一个游戏,我在使用切换按钮更新布尔值时遇到了问题

这是按钮:

using UnityEngine;
using Assets.Code.Interfaces;
using Assets.Code.Scripts;
using Assets.Code.PowerPlants;

namespace Assets.Code.States

public void ShowIt()
{
    HydroElectric.t1Bool = GUI.Toggle (new Rect (25, 55, 100, 50), HydroElectric.t1Bool, "Turbina 2 MW");
    GUI.Box (new Rect (Screen.width - 100, 60, 80, 25), HydroElectric.prod.ToString ()); // PRODUCED ENERGY 
}
这就是我的if条件:

using System;

namespace Assets.Code.PowerPlants

public class HydroElectric
{
    public static bool t1Bool = true;
    public int turbina1;
    public static float prod = 0;

    public HydroElectric ()
    {
        if (t1Bool == true)
        {
            turbina1 = 2;
        }
        else
        {
            turbina1 =0;
        }

        prod = turbina1;
    } 
}

我在控制台上没有错误,bool值正在更改(我使用了debug),但是turbina1的值没有更改(当我从第一个脚本调试它时)。我不知道为什么它的值不会随着真或假条件而改变。有什么想法吗?

类中,构造函数在创建对象时获取
t1Bool
的值,并使用它来计算
prod
的值。在该点之后,当
t1Bool
的值更改时,代码中没有任何内容会更改
prod
的值

每次读取
t1Bool
的值时,都要计算
prod
,而不是设置该值:

public class HydroElectric
{
    public static bool t1Bool = true;
    public static float prod
    {
        get
        {
            return t1Bool ? 2f : 0f;
        }
    }
}
或者,只要
t1Bool
的值发生变化,您就可以设置
prod
的值:

public class HydroElectric
{
    private static bool _t1Bool = true;
    public static bool t1Bool 
    {
        get { return _t1Bool; }
        set
        {
            _t1Bool = value;
            prod = value ? 2f : 0f;
        }
    }

    public static float prod = 2f;
}
这稍微快一点,但仅足以在您非常频繁地检查
prod
的值时产生差异


还有其他方法可以响应不断变化的状态,包括事件处理程序和隐式通知程序列表。只要记住,如果你想让事情发生,你必须让它发生,并且赋值类型(简单的数字和布尔值以及复杂的
struct
类型)不会随着时间的推移不断更新

您的bool条件在构造函数中执行,这意味着
水电站.t1Bool
将不起作用,因为在实例化
水电站时,
涡轮机1
已设置。将bool条件放在一个单独的方法中,并从脚本中调用它。

但是您知道我使用切换按钮来操作turbina 1的值,对吗?你的代码对我来说有点高级,我觉得我必须学习一点才能理解。我还有turbina 2和turbina 3。所有三个都在prod中求和。另外,为什么要使用float?在示例代码中只显示了
turbina1
,没有在构造函数之外引用它,所以我忽略了它。如果需要这些值,请添加它们。代码本身是相当简单的属性get/set,您应该学习它,因为它在C#中非常常见。