Unity c# UI.文本问题:(…)这是不支持的.UnityEngine.Canvas: SendWillRende
本文关键字:不支持 UnityEngine SendWillRende Canvas UI 文本 问题 Unity | 更新日期: 2023-09-27 18:11:20
尝试添加LineDescriptor(Clone)
(UnityEngine.UI.Text
)图形重建,而我们已经在图形重建循环。这是不支持的。UnityEngine.Canvas:SendWillRenderCanvases()
嘿,我得到了这个问题,当我试图更新与文本组件附加许多游戏对象的位置。你知道是什么原因引起的吗?
for(int i = 0; i< dottedLines.Count; i++)
{
dottedLineStaff[dottedLines[i]][1].transform.position = RectTransformUtility.WorldToScreenPoint(Camera.main, dottedLineStaff[dottedLines[i]][0].transform.position);
}
我遇到了这个错误,当我有一个异步插件控制脚本实例化UI预制。基本上,插件偶尔会在图形过程中实例化UI预制件。重建循环。在我与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描述的错误。