当我们已经在图形重建循环中时,尝试添加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);
}
答案 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描述。