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];
我正在使用 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];