2016-10-03 68 views
0

嘗試爲圖形重建添加LineDescriptor(Clone)UnityEngine.UI.Text),同時我們已經在圖形重建循環中。這不支持。 UnityEngine.Canvas:SendWillRenderCanvases()Unity C#UI.Text問題:(...)這不支持。 UnityEngine.Canvas:SendWillRenderCanvas()

嘿,當我嘗試更新附加文本組件的許多遊戲對象的位置時,我遇到了這個問題。有什麼想法是什麼原因的錯誤?

for(int i = 0; i< dottedLines.Count; i++) 
    { 
     dottedLineStaff[dottedLines[i]][1].transform.position = RectTransformUtility.WorldToScreenPoint(Camera.main, dottedLineStaff[dottedLines[i]][0].transform.position); 
    } 
+0

我解決了這個問題。我遇到了許多對象共享相同引用的問題。簡而言之:我嘗試使用一個預先製作的參考來保存每個Text對象,而不是獲取bug「null reference」,我找到了那個。每當我保存新的Text對象時,舊的對象就失去了參考。 –

回答

0

我遇到了這個錯誤,當我有一個異步插件控制一個腳本實例化UI預製。基本上,插件偶爾會在Graphic.Rebuild循環中實例化一個UI預製件。 UI預製件的部分將不正確地繪製,直到我與它們進行交互。

我的解決方案是爲下一次Update()調用排隊實例,而不是在插件調用回調時正確實例化它們。類似的東西來:

List<string> queue = new List<string>(); 
private object thisLock = new object(); 

public void PluginCallback(string name) 
{ 
    // instead of instantiating/modifying UI elements here, queue them for later 
    lock (thisLock) 
    { 
     queue.Add(name); 
    } 
} 

void Update() 
{ 
    lock (thisLock) 
    { 
     // shouldn't be in a Graphic.Rebuild loop now 
     if (queue.Count > 0) 
     { 
      foreach (string name in queue) 
      { 
       Text text = (Instantiate(prefab) as GameObject).GetComponent<Text>(); 
       text.text = name; 
      } 
      queue.Clear(); 
     } 
    } 
} 

僅供參考 - 我也看到了其他職位,其中的問題是更可能一個統一的bug(iOS版,老年版團結等)。

編輯:增加鎖定示例(https://msdn.microsoft.com/en-us/library/c5kehkcz.aspx)。我對這個問題涉及到的概念相當陌生,所以我可能會隨着時間的推移而逐漸形成我的答案...所以,我不會聲稱整個例子的總體適用性 - 我只是說在我的情況下它解決了錯誤該OP描述。