Unity3D 忽略我的布尔变量

Unity3D ignoring my boolean variable

我正在使用 Unity 4.6.1 开发一个项目,我遇到了一个奇怪的问题:我有一个最初设置为 [=12= 的 bool 变量],我试图在 Start() 方法中将其设置为 true。首先,碰巧同一脚本中的函数在另一个脚本的 Start() 方法之前被调用(这不应该发生?)其次,Start() 中的行 ready = true; 似乎有没有效果。这是相关代码:

public int ready = 0;

    void Start()
    {
        texts = new List<string>(3);
        texts.Add("");
        texts.Add("");
        texts.Add("");
        text1.text = texts[0];
        text2.text = texts[1];
        text3.text = texts[2];
        Debug.Log("Setting ready to true");
        ready = true;
    }

    public void showText(string text)
    {
        Debug.Log("Ready=" + ready);
        if (!ready)
            return;        
        texts.Insert(2, texts[1]);
        texts.Insert(1, texts[0]);
        texts.Insert(0, text);
    }

运行 的日志输出是:

16:07:03.563: Setting ready to true
16:07:24.831: Ready=0

为什么会这样?!

你犯了一个简单的错误。您将 ready 变量声明为 int 而不是 bool。

改变public int ready = 0;

public bool ready = false;

另外,由于 ready 是 public,请确保它没有在编辑器中设置为 false。如果您对此不确定,请准备一个私有变量。因此,将 public 替换为 private。我的第一个回答应该能解决你的问题。

在发布问题之前,我决定尝试使用 int 变量而不是 boolean,但我忘记了将其更改回来,这就是为什么 int 声明是错误的在上面的问题中。 Start() 或 Awake() 方法似乎根本没有被调用 因为我使用 new 运算符实例化了 class。我使 class 扩展了 MonoBehaviour,插入了一个空的 GameObject 作为 Text 对象的父对象,并执行了以下操作:

GameObject canvas = GameObject.Find("canvas");
uiController = canvas.AddComponent<UIText>();

Awake()中的代码更改为:

GameObject canvas = GameObject.Find("canvas");
text1 = canvas.transform.FindChild("Text1").GetComponent<Text>();
text2 = canvas.transform.FindChild("Text2").GetComponent<Text>();
text3 = canvas.transform.FindChild("Text3").GetComponent<Text>();
texts = new List<string>(3);
texts.Add("");
texts.Add("");
texts.Add("");
text1.text = texts[0];
text2.text = texts[1];
text3.text = texts[2];