繁体   English   中英

从另一个脚本操作C#时Unity3D静态布尔值未更新

[英]Unity3D static bool value not updating when manipulating from another script c#

我正在制作我的第一款游戏,但无法使用切换按钮更新布尔值。

这是按钮:

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

public HydroElectric ()是默认构造函数。 仅当您使用new HydroElectric()实例化一个新HydroElectric实例时,它才会执行。 你永远不会做。 这就是为什么从未真正调用此函数内的代码的原因。

此外,不是一般情况,而是专门针对MonoBehaviour,完全不使用构造函数不是一个好习惯,因为在最佳情况下,它将被调用一次,然后立即被场景序列化覆盖。 查看更多: 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");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM