C# Couroutine不允许我更改unity3d中的文本
在这里,我试图打开一个菜单作为一个预置(它工作得非常好),然后用一个协同程序(什么不工作)每秒更新预置中的一个文本元素C# Couroutine不允许我更改unity3d中的文本,c#,unity3d,text,coroutine,C#,Unity3d,Text,Coroutine,在这里,我试图打开一个菜单作为一个预置(它工作得非常好),然后用一个协同程序(什么不工作)每秒更新预置中的一个文本元素 public void openChestsMenu(游戏对象窗口){ GameObject chestsMenu=实例化(Resources.Load(“预置/接口/箱子菜单”))为GameObject; chestsMenu.transform.SetParent(GameObject.FindGameObjectWithTag(“Canvas”).transform,fa
public void openChestsMenu(游戏对象窗口){
GameObject chestsMenu=实例化(Resources.Load(“预置/接口/箱子菜单”))为GameObject;
chestsMenu.transform.SetParent(GameObject.FindGameObjectWithTag(“Canvas”).transform,false);
更新测试菜单(窗口);
start例程(StartTimer(窗口));
}
私有void更新测试菜单(游戏对象窗口){
System.TimeSpan TimeSpan=GameManager.playerData.getTimeLeftForNewChest();
Text[]Text=window.GetComponentsInChildren();
text[0].text=GameManager.playerData.getChests(0.ToString()+“/4”;
text[1]。text=timeSpan.Hours+:“+timeSpan.Minutes+”:“+timeSpan.Seconds;
}
IEnumerator StartTimer(游戏对象窗口){
isChestMenuActive=true;
System.TimeSpan TimeSpan;
Text[]timerText=window.GetComponentsInChildren();
while(正在进行中){
timeSpan=GameManager.playerData.getTimeLeftForNewChest();
更新测试菜单(窗口);
GameManager.log(timeSpan.Hours+”:“+timeSpan.Minutes+”:“+timeSpan.Seconds);
//timerText.text=timeSpan.Hours+“:”+timeSpan.Minutes+“:”+timeSpan.Seconds;
返回新的WaitForSeconds(1);
}
}
所有调用的函数都返回正确的值,当我打开菜单时,正确的值被正确加载,但从未更新。当我记录我试图更新的文本时,correctvalue每秒钟都会写入控制台,但预置中的文本不会更新
我尝试了很多不同的方法来解决这个问题,谁能告诉我错误在哪里 只是试过你说的,但仍然不起作用。慢慢地,我开始觉得团结有问题。不管我怎么尝试,我都不能从协同程序中更改文本!这没有任何意义。好吧,我刚才看到使用的referencei链接到了预置中的文本组件。但是它是否也应该改变预设的实际实例中的文本元素呢?我完全按照你说的做了。我为脚本中的文本声明了一个公共变量,上面的代码位于其中,并将refreference设置为预置中的text元素。它适用于预制件,但不影响其实例。当我尝试从编辑器实例化预置并将引用设置为实例化菜单时,当我从HIRACHY中删除菜单时,引用会自动删除。我应该用什么来设置公共变量呢?使用coroutine只是为了显示一个标志,并在“update”中用这个标志来更新文本。我认为代码中存在问题。您的
text
和timerText
变量与使用WindowGameObject派生的变量相同。该值可能被覆盖。只是尝试了你所说的,但仍然不起作用。慢慢地,我开始觉得团结有问题。不管我怎么尝试,我都不能从协同程序中更改文本!这没有任何意义。好吧,我刚才看到使用的referencei链接到了预置中的文本组件。但是它是否也应该改变预设的实际实例中的文本元素呢?我完全按照你说的做了。我为脚本中的文本声明了一个公共变量,上面的代码位于其中,并将refreference设置为预置中的text元素。它适用于预制件,但不影响其实例。当我尝试从编辑器实例化预置并将引用设置为实例化菜单时,当我从HIRACHY中删除菜单时,引用会自动删除。我应该用什么来设置公共变量呢?使用coroutine只是为了显示一个标志,并在“update”中用这个标志来更新文本。我认为代码中存在问题。您的text
和timerText
变量与使用WindowGameObject派生的变量相同。该值可能会被覆盖。
public void openChestsMenu(GameObject window) {
GameObject chestsMenu = Instantiate (Resources.Load ("Prefabs/Interfaces/Chests Menu")) as GameObject;
chestsMenu.transform.SetParent (GameObject.FindGameObjectWithTag ("Canvas").transform, false);
updateChestMenu (window);
StartCoroutine (StartTimer (window));
}
private void updateChestMenu (GameObject window) {
System.TimeSpan timeSpan = GameManager.playerData.getTimeLeftForNewChest ();
Text[] texts = window.GetComponentsInChildren<Text> ();
texts[0].text = GameManager.playerData.getChests(0).ToString() + "/4";
texts [1].text = timeSpan.Hours + " : " + timeSpan.Minutes + " : " + timeSpan.Seconds;
}
IEnumerator StartTimer(GameObject window) {
isChestMenuActive = true;
System.TimeSpan timeSpan;
Text[] timerText = window.GetComponentsInChildren<Text> ();
while (isChestMenuActive) {
timeSpan = GameManager.playerData.getTimeLeftForNewChest ();
updateChestMenu (window);
GameManager.log (timeSpan.Hours + " : " + timeSpan.Minutes + " : " + timeSpan.Seconds);
//timerText.text = timeSpan.Hours + " : " + timeSpan.Minutes + " : " + timeSpan.Seconds;
yield return new WaitForSeconds (1);
}
}