当前位置: 首页 > news >正文

保定市做网站的公司seo公司 引擎

保定市做网站的公司,seo公司 引擎,如何看网站是否被降权,商标注册代办unity UI如何开启(显示)或者关闭(隐藏)Panel界面,相信大家都是知道的,但是如何做最好呢? 可能大家一般开启/关闭界面的方法就是直接SetActive吧。这样做通常是可以的,简答快速地解决…

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;

使用Profiler工具分析CanvasGroup组件

首先创建一个BasePanel脚本,通过CanvasGroup组件来实现UI面板的显示(OnEnter)和隐藏(OnExit)。这里的BasePanel相当于是UIPanel的基类了,这里我只是抽出了一部分,等以后有空了把简易的UI管理类也一起讲了。

[RequireComponent(typeof(CanvasGroup))]
public class BasePanel : MonoBehaviour
{private CanvasGroup m_CanvasGroup;private void Awake(){m_CanvasGroup = GetComponent<CanvasGroup>();}public void OnEnter(){m_CanvasGroup.alpha = 1;m_CanvasGroup.blocksRaycasts = true;}public void OnExit(){m_CanvasGroup.alpha = 0;m_CanvasGroup.blocksRaycasts = false;}
}


然后就创建一个测试脚本,用于比较CanvasGroup组件和使用SetAcive(true/false)的性能消耗。这边要引入命名空间UnityEngine.Profiling才可以使用性能检测,在需要性能测试的函数前后添加Profiler.BeginSample("展示的名字")和Profiler.EndSample()即可。这里为了明显展现性能消耗,开放了一个num变量来控制我们循环次数。

public class Main : MonoBehaviour
{public BasePanel panel;public int num;//public GameObject panelGo;private void Awake(){//panel = panelGo.GetComponent<BasePanel>();}private void Update(){Profiler.BeginSample("CanvasGroup");CanvasGroupFun();Profiler.EndSample();Profiler.BeginSample("SetActive");ActiveFun();Profiler.EndSample();}void CanvasGroupFun(){for (int i = 0; i < num; i++){panel.OnEnter();panel.OnExit();}}void ActiveFun(){for (int i = 0; i < num; i++){panel.gameObject.SetActive(true);panel.gameObject.SetActive(false);}}
}


将num设为100次结果如图:

http://www.khdw.cn/news/510.html

相关文章:

  • 哪个网站做简历好国外搜索引擎网址
  • 如何做谷歌网站优化今日热点
  • 2018做网站赚钱不google google
  • 建站系统网站建设营销方案包括哪些内容
  • 三墩网站建设淘宝优化标题都是用什么软件
  • 曲阜官方建设局网站百度运营平台
  • 浙江住房和城乡建设厅网站网络推广好做吗?
  • 免费cms网站管理系统东莞网站排名提升
  • 前端网站开发研究报告二十四个关键词
  • 网站海外推广多少钱百度游戏中心
  • 有没有给别人做图赚钱的网站疫情最新消息今天公布
  • 新乡模板建站优化提升
  • 网站建设的目入图片企业宣传推广
  • 长沙做网站的推广计划书范文
  • 哈尔滨行业网站电商营销
  • 网站底部备案号代码珠海seo快速排名
  • java做网站教程长春网站建设推广
  • 全自动网站制作系统青岛官网seo方法
  • 手机网站打开微信支付功能广州白云区新闻头条最新消息今天
  • 初识网站开发流程图网络公关
  • 网站办公室文化建设自己怎么制作网页
  • 网站界面设计如何实现功能美与形式美的统一网络营销推广方案3篇
  • 在那些免费网站做宣传效果好河南seo快速排名
  • 网站制作视频教程新手必看宁波seo网络推广产品服务
  • 成都网站制作公司科蓝上海谷歌seo公司
  • 跨境网络营销案例安卓优化大师官网下载
  • asp.net做的网站要放到网上空间去_要放哪些文件上去windows系统优化软件
  • 中装建设集团网站网盟推广是什么意思
  • 网站开发需要的知识搜索推广是什么意思
  • 宁波制作网站公司口碑seo推广公司