Unity3d 为什么canvas仍在重建和重新匹配其数据?

Unity3d 为什么canvas仍在重建和重新匹配其数据?,unity3d,unity-ui,Unity3d,Unity Ui,我希望避免在显示/隐藏UI元素时发生重建/重新匹配过程,因此我遵循了以下建议:解决方法是将要显示/隐藏的UI放置在自己的画布上。。。而且。。。启用/禁用此对象上的画布组件。 通过将5000张图像放置在单独的空画布下进行测试,并使用以下脚本仅启用/禁用该画布父游戏对象上的画布组件: public class CanvasScript : MonoBehaviour { public Canvas canvas; private Image[] images = new Image[

我希望避免在显示/隐藏UI元素时发生重建/重新匹配过程,因此我遵循了以下建议:解决方法是将要显示/隐藏的UI放置在自己的画布上。。。而且。。。启用/禁用此对象上的画布组件。

通过将5000张图像放置在单独的空画布下进行测试,并使用以下脚本仅启用/禁用该画布父游戏对象上的画布组件:

public class CanvasScript : MonoBehaviour
{
    public Canvas canvas;
    private Image[] images = new Image[5000];

    public void CreateImages()
    {
       for (int i = 0; i < 5000; i++)
       {
           GameObject NewObj = new GameObject(); //GameObject
           images[i] = NewObj.AddComponent<Image>(); //Image Script                       
           NewObj.GetComponent<RectTransform>().SetParent(canvas.transform); //set child
        }
    }

    public void EnableDisableSubCanvas()
    {
        canvas.enabled = !canvas.enabled;
    }
}
public类CanvasScript:monobhavior
{
公共画布;
私有映像[]映像=新映像[5000];
public void CreateImages()
{
对于(int i=0;i<5000;i++)
{
GameObject NewObj=新GameObject();//GameObject
images[i]=NewObj.AddComponent();//图像脚本
NewObj.GetComponent().SetParent(canvas.transform);//设置子对象
}
}
public void EnableDisableSubCanvas()
{
canvas.enabled=!canvas.enabled;
}
}

问题:调用EnableDisableSubCanvas()仍然会在UGUI.Rendering.UpdateBatches调用上产生大峰值(~100ms)。为什么会发生这种情况,或者我做错了什么?

探查器说什么?它显示UGUI.Reendering.UpdateBatches在画布上耗时50毫秒。enable=false,在画布上耗时约100毫秒。enable=true。这确实是启用/禁用每个图像游戏对象速度的两倍,但我仍然希望它不会出现尖峰。除了
启用
属性之外,您是否研究过其他暂停画布渲染的选项?我隐约记得自己试图避开那些愚蠢的钉子,也许就是这样。谢谢你的提示。我现在在分配给每个UI对象的CanvasRenderer组件中,在0和1之间切换SetAlpha,消除了尖峰。最终结果是相同的,显示或隐藏了5000个图像,但更新匹配所用的时间是<1ms,而不是100ms。因此,我将考虑在我的项目中显示/隐藏UI Obj.这是可行的解决方法。尽管如此,我仍然想找出为什么结果与unity在该教程链接中所说的相矛盾。探查器怎么说?它显示UGUI.Reendering.UpdateBatches在画布上耗时50毫秒。enable=false,在画布上耗时约100毫秒。enable=true。这确实是启用/禁用每个图像游戏对象速度的两倍,但我仍然希望它不会出现尖峰。除了
启用
属性之外,您是否研究过其他暂停画布渲染的选项?我隐约记得自己试图避开那些愚蠢的钉子,也许就是这样。谢谢你的提示。我现在在分配给每个UI对象的CanvasRenderer组件中,在0和1之间切换SetAlpha,消除了尖峰。最终结果是相同的,显示或隐藏了5000个图像,但更新匹配所用的时间是<1ms,而不是100ms。因此,我将考虑在我的项目中显示/隐藏UI Obj.这是可行的解决方法。尽管如此,我仍然想找出为什么结果与unity在教程链接中所说的相矛盾。