Unity C#UI.Text问题:(...)这不受支持。 UnityEngine.Canvas:SendWillRenderCanvases()

时间:2016-10-03 10:17:33

标签: c# unity3d unity5

当我们已经在图形重建循环中时,尝试添加LineDescriptor(Clone)UnityEngine.UI.Text)进行图形重建。这不受支持。 UnityEngine.Canvas:SendWillRenderCanvases()

嘿,当我尝试更新附加了文本组件的许多游戏对象的位置时,我遇到了这个问题。知道这个bug的原因是什么?

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

1 个答案:

答案 0 :(得分: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();
        }
    }
}

仅供参考 - 我还看过其他帖子,其中的问题更可能是Unity错误(iOS,较旧的Unity版本等)。

编辑:添加锁定到示例(https://msdn.microsoft.com/en-us/library/c5kehkcz.aspx)。我对这个问题涉及的概念很陌生,所以我可能会随着时间的推移逐渐改进我的答案......所以,我没有对整个例子的总体适当性提出任何要求 - 我只是说在我的情况下它解决了错误OP描述。