从另一个脚本c#进行操作时,Unity3D静态布尔值未更新

本文关键字:Unity3D 静态 布尔值 更新 操作 脚本 另一个 | 更新日期: 2023-09-27 18:26:30

我正在制作我的第一个游戏,使用切换按钮更新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的值没有改变(当我从第一个脚本调试它时)。我不知道为什么它的值不随真或假条件而变化。知道吗?

从另一个脚本c#进行操作时,Unity3D静态布尔值未更新

public HydroElectric ()是默认的构造函数。只有当您使用new HydroElectric()实例化一个新的HydroElectric实例时,才会执行它。你从来没有这样做过。这就是为什么这个函数中的代码从来没有被实际调用过。

此外,不是在一般情况下,而是在MonoBehavior中,使用构造函数根本不是一个好的做法,因为在最好的情况下,它会被调用一次,然后立即被场景序列化覆盖。查看更多信息:http://answers.unity3d.com/questions/32413/using-constructors-in-unity-c.html

例如,如果你想实现的是每次更改t1Bool时都执行代码,你可以将其作为一个属性:

public class HydroElectric
{
  //.... Your other code
  //....
  public static bool T1Bool {
    get{
      return t1Bool;
    }
    set{
      t1Bool = value;
      if (t1Bool == true)
      {
        turbina1 = 2;
      }
      else
      {
        turbina1 =0;
      }
      prod = turbina1;
    }
  }
}
//...
// Usage
HydroElectric.T1Bool = GUI.Toggle (new Rect (25, 55, 100, 50), HydroElectric.T1Bool, "Turbina 2 MW");