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

本文关键字:变量值 另一个 脚本 bool Unity3D if 条件 带有 | 更新日期: 2023-09-27 18:26:37

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

这是按钮:

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的值没有改变(当我从第一个脚本调试它时)。我不知道为什么它的值不随真或假条件而变化。知道吗?

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

HydroElectric类中,构造函数在创建对象时获取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条件在构造函数中执行,这意味着HydroElectric.t1Bool将不起作用,因为在实例化HydroElectric时已经设置了turbina1。将bool条件放在一个单独的方法中,然后从脚本中调用它。