繁体   English   中英

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

[英]Unity3D if condition with bool failing to send variable value to 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的值没有更改(当我从第一个脚本调试时)。 我不知道为什么它的价值不会随着真假条件而变化。 任何想法?

HydroElectric类中,构造t1Bool在创建对象时采用t1Bool的值,并使用它来计算prod的值。 此后,当t1Bool的值更改时,代码中将没有任何内容会更改prod的值。

不必每次设置值, t1Bool每次读取时都根据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类型)将不会随着时间的推移不断更新它们。

你的布尔条件是在构造函数中,这意味着执行HydroElectric.t1Bool将无法工作,因为turbina1时已经设置HydroElectric被实例化。 将布尔条件放在单独的方法中,然后从脚本中调用它。

暂无
暂无

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

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