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;