我正在制作我的第一个游戏,但我无法使用切换按钮更新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的值没有改变(当我从第一个脚本调试它时)。我不知道为什么它的价值不会随真假情况而改变。有什么想法吗?
答案 0 :(得分:1)
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");