unity UI如何开启(显示)或者关闭(隐藏)Panel界面,相信大家都是知道的,但是如何做最好呢?

可能大家一般开启/关闭界面的方法就是直接SetActive吧。这样做通常是可以的,简答快速地解决需求,但是它又两个问题:
第一,Disable掉的物体上面的脚本也不运行了,而很多时候我们需要那个脚本运行。这样就不能用挂在自己身上脚本把自己SetActive(true)或者SetActive(false)。如果把自己的引用给另外一个脚本来对自己SetActive(true)或者SetActive(false),又会造成多余的耦合,并不符合OOP设计理念。
第二,Disable掉的物体,重新SetActive(true),会造成较大的性能消耗,如果此界面draw call较多,会有明显的延迟。

不用SetActive(true)/(false)之后,我们还有什么其他方法解决问题吗?

以下是大家可能想到的其他方法,它们也各有各的问题:

方法: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;

以上就是各种方法的对比。We got a winner!

以下是我自己做的小游戏,扫码玩玩看:

unity UI如何开启(显示)或者关闭(隐藏)Panel界面最好?相关推荐

  1. 动态控制SAP C4C UI元素的显示和隐藏

    C4C UI上UI元素的显示和隐藏可以通过Key User在Adaptation模式里通过编辑一些简单的rule去控制,诸如这种格式: if ( logic expression = true )th ...

  2. Unity读取图片并显示到UI中

    Unity读取图片并显示到UI中 方法一:将图片转换成字符串 代码 解释 效果图 方法二:将图片转换成字节数组 代码 解释 效果图 对比 在进行Unity开发时,经常会遇到将读取磁盘中图片显示到UI上 ...

  3. Unity中将3D模型显示在UI上或者显示在UI前面

    标题 Unity中将3D模型显示在UI上或者显示在UI前面 一.将3D模型显示在UI上-使用RawImage和Render Texture组合实现效果 1.创建一个RawImage控件 2.创建一个R ...

  4. unity怎么在UI面板上显示出3D立体模型

    unity怎么在Ui面板上显示出3D模型! 1.创建Render texture 2.创建RawImage 3.创建摄像机 注意点:1,摄像机和RawImage上面要将Render texture拖上 ...

  5. Unity UGUI 效果 之 UI 元素 多边形UI (例如雷达图,圆形,不规则多边形 UI等)显示 的简单实现的几种方法整理

    Unity UGUI 效果 之 UI 元素 多边形UI (例如雷达图,圆形,不规则多边形 UI等)显示 的简单实现的几种方法整理 目录 Unity UGUI 效果 之 UI 元素 多边形UI (例如雷 ...

  6. Unity UI优化策略

    Unity UI优化策略 前言 最近学习了Unity的图形渲染和UI的优化部分,感觉还是有挺多东西的.在此做一个简单的总结和记录. 如果把计算机绘制想象成画画,想要加快画画速度,我们可以从几个方面来进 ...

  7. Unity UI架构设计理念

    Unity UI架构设计理念 https://www.jianshu.com/p/e64347dff4fe Unity UI架构设计理念 1.以ARPG为例,多个场景会反复出现相同的"UI窗 ...

  8. PyQt5子窗口开启后锁定或隐藏主窗口

    PyQt5子窗口开启后锁定或隐藏主窗口 老规矩,先放图 锁定主窗口 隐藏主窗口 实现 实现方式非常简单与C++方式基本相同 在主界面UI初始化时把按钮信号与拉起窗口的槽函数绑定,这里我的按钮为sele ...

  9. 【厚积薄发】Unity UI 显隐(共存)关系的优化处理方案

    这是第146篇UWA技术知识分享的推送.今天我们继续为大家精选了若干和开发.优化相关的问题,建议阅读时间10分钟,认真读完必有收获. UWA 问答社区:answer.uwa4d.com UWA QQ群 ...

最新文章

  1. 【Jenkins系列1】Jenkins定时任务设置
  2. 深入浅出UML类图(四)
  3. CSS reset 标签初始化设置
  4. 语音识别中强制对齐_语音识别中的标注问题和嵌入式训练
  5. [詹兴致矩阵论习题参考解答]习题7.1
  6. [Go] 正则表达式 示例
  7. c语言竞赛成绩排序,吧内编程竞赛:成绩公布
  8. 软链接文件和硬链接文件
  9. LeetCode---binary-tree-inorder-traversal
  10. 【PostgreSQL-9.6.3】函数(2)--字符型函数
  11. GDAL库中WFS服务中含有中文不能获取数据的问题
  12. HTML期末大作业——基于html实现传统文化苏绣手工艺带psd设计图视频dw模板
  13. LIFT: Learned Invariant Feature Transform 论文解读
  14. python 二值化细化_Python OpenCV图像细化
  15. 淘宝新店流量如何从0到1000
  16. X must be 1D: shape is (1440, 1)
  17. 深入理解Java虚拟机(周志明版)总结—WSYW126
  18. 我的择业思考:在AI最火的时候来到工业界!
  19. 便携一体机设计资料机构图:定制化仪器户外便携式手提触摸一体机
  20. C++入门教程(十一、宏)

热门文章

  1. swift基础语法(02-基本数据类型)
  2. brew 、carthage 安装
  3. 学习重要,还是学会学习重要
  4. 小米手机连接不上网络 或者 暂时关闭状况不佳的连接
  5. 【数据结构】——排序二叉树
  6. 在Visual Studio 2005下配置WinPcap开发环境
  7. C++内存管理变革(3):另类内存管理
  8. 无刷新二级联动菜单的Request问题
  9. VS调试提示无可用源。
  10. PHP错误提示的关闭方法详解