隐藏界面最佳解决方案

    xiaoxiao2023-12-01  158

    隐藏界面最佳解决方案

    隐藏界面方案最优解决办法

    隐藏界面方案

    1.SetActive 优点:方便快捷 缺点:第一,Disable掉的物体上面的脚本也不运行了,而很多时候我们需要那个脚本运行。这样就不能用挂在自己身上脚本把自己SetActive(true)或者SetActive(false)。如果把自己的引用给另外一个脚本来对自己SetActive(true)或者SetActive(false),又会造成多余的耦合,并不符合OOP设计理念。

    2Disable Disable掉的物体,重新SetActive(true),会造成较大的性能消耗,如果此界面draw call较多,会有明显的延迟。

    其他乱七八糟的解决办法 方法:Scale改为0,0,0,再改为1,1,1; 问题:改回后draw call加倍;大量垃圾回收;

    方法:将界面移除Canvas这个父物体; 问题:改回后draw call加倍;大量垃圾回收;而且新增父物体增加额外引用耦合;

    方法:放在Camera的某个culling层上; 问题:改回后draw call加倍;大量垃圾回收;只对screen space-camera有效;

    方法:Canvas.enable = false; 问题:改回后延迟严重;而且不方便使用;

    最优解决办法

    给Panel加一个CanvasGroup,上面提到的问题,在它身上都不会发生 若要显示:

    GetComponent<CanvasGroup>().alpha = 1; GetComponent<CanvasGroup>().interactable = true; GetComponent<CanvasGroup>().blocksRaycasts = true;

    若要隐藏:

    GetComponent<CanvasGroup>().alpha = 0; GetComponent<CanvasGroup>().interactable = false; GetComponent<CanvasGroup>().blocksRaycasts = false;
    最新回复(0)