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

怎么做网站登录站谷歌seo服务

怎么做网站登录站,谷歌seo服务,网站地图 怎么做,顺德微网站建设推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 在开发中总是会控制UI界面,如何优雅的控制UI界面是…

推荐阅读

  • CSDN主页
  • GitHub开源地址
  • Unity3D插件分享
  • 简书地址
  • 我的个人博客

大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。

一、前言

在开发中总是会控制UI界面,如何优雅的控制UI界面是每一个Unity3D程序员的必修课。

这篇文章就总结了一下博主在实际开发中用到的几种控制UI的方式,分享出来以供批评指正。

在文章的最后,也根据UI控制做了一些延展,比如说:

  • 控制UI顺序
  • 控制UI层级
  • 控制初始化的先后顺序
  • 显示隐藏的堆栈

二、正文

2-1、讨论UI控制的解决方案

先说一下痛点吧,隐藏UI面板很简单,xx.SetActive(false);就行,但是这个管理的脚本放在哪里是个问题。

因为这个挂载的对象一旦隐藏,那么这个脚本就失灵了,所以一般不能挂载在UI面板自己身上,因为一旦隐藏就不管用了。

但是UI统一管理耦合性太高,不适合组件开发,但是也是一种控制方法。

挂载在UI面板自己身上,就需要一些技巧,避开隐藏自身这种行为。

由此为基础,有下面几种方案的讨论。

2-1-1、用一个脚本统一管理脚本的方式

实现方式
先搭建UI,然后新建一个对象挂载控制UI的脚本,然后这个脚本里面控制所有的UI事件。

例子
效果图:
在这里插入图片描述

在这里插入图片描述
代码参考:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;public class UIControl : MonoBehaviour
{public GameObject Panel1;public Button Btn1;public GameObject Panel2;public Text TextTitle;public Text TextContent;public GameObject Panel3;public GameObject Panel4;void Start(){// 按钮绑定Btn1.onClick.AddListener(ClickSure);}void ClickSure(){}public void ShowPanel(){Panel1.SetActive(true);}
}

用这个脚本去控制所有的对象,保存隐藏显示、文字赋值、按钮绑定事件等。

优缺点
优点:
脚本一般都在一个独立对象上,脚本容易找。控制显示隐藏不容易报NULL对象错误。

缺点:
耦合性太高,所有的UI对象都在一个脚本中,脚本代码比较拥杂,并且无法独立出来形成组件进行复用。

2-1-2、面板自身挂载脚本,通过控制所有子对象来隐藏面板

实现方式
UI自身带有控制的脚本,通过控制所有子对象来实现隐藏或显示。

例子
效果图:
在这里插入图片描述

优缺点

优点:组件化开发,可以形成预制体复用,不必隐藏面板。

缺点:需要获取所有子对象,并且父节点身上不能添加Image,不然隐藏所有子对象也不行。

2-1-3、面板自身挂载脚本,通过控制UI界面缩放来隐藏面板

实现方式
UI界面挂载脚本,控制UI界面的缩放为0即可隐藏脚本,算是视觉隐藏,但是实际没有隐藏。

例子
效果图:
在这里插入图片描述

优缺点
优点:不必获取子对象,使用缩放控制。

缺点:不确定面板是否要显示,没法控制显示顺序。

2-1-4、面板自身挂载脚本,通过控制UI子节点来隐藏面板

实现方式
算是第一种和第二种方法的一种优化和升级。

在UI界面下面再设置一个节点用来控制所有的UI对象,随意控制隐藏和显示都没有问题,也不用获取所有的子对象,非常好用。

例子
效果图:
在这里插入图片描述

优缺点
优点:控制子对象,不用直接控制UI界面,避免脚本禁用情况,方便管理,也可以默认隐藏,更加灵活。

缺点:搭建UI的时候需要按照一定的规则搭建。比如UI界面是根节点,下一个节点是控制UI界面隐藏和显示的节点,再下面才是真正的UI搭建。

2-2、方法改良及可行性演示

2-1小结分析的几种解决方案都有优点和缺点,再次基础上,总结了一个比较完善的改良型方案。

UI面板自身挂载脚本,下面一个子节点是所有UI的父节点,也就是:

在这里插入图片描述
这样的话,一个UI界面的父节点是固定的,然后子节点用同一个名字方便脚本控制。

代码参考:

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Diagnostics;
using UnityEngine.UI;public class Panel3Logic : MonoBehaviour
{GameObject currentObj;Button BtnSure;Action endAction;void Start(){currentObj = transform.Find("UIControl").gameObject;currentObj.SetActive(false);BtnSure = currentObj.transform.Find("BtnSure").GetComponent<Button>();BtnSure.onClick.AddListener(BtnSureEvent);}/// <summary>/// 显示隐藏面板/// </summary>/// <param name="ison"></param>void ShowInfo(bool ison){currentObj.SetActive(ison);}/// <summary>/// 设置委托函数/// </summary>/// <param name="ison"></param>/// <param name="endAction"></param>void ShowInfo(bool ison, Action endAction){currentObj.SetActive(ison);this.endAction = endAction;}/// <summary>/// 点击确定的时候,关闭面板,并且执行委托函数/// </summary>void BtnSureEvent(){currentObj.SetActive(false);endAction?.Invoke();}
}

2-3、延展内容

这一节就将UI控制解决方案再做一下延展,包括:

  • 控制初始化的先后顺序
  • 控制UI层级和顺序
  • 显示隐藏的堆栈

新建一个UI基类UIBase.cs,双击编辑代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;public class UIBase : MonoBehaviour
{/// <summary>/// 初始化顺序/// </summary>public int StartOrder;/// <summary>/// 层级顺序/// </summary>public int LayerOrder;/// <summary>/// 唯一标识符/// </summary>[HideInInspector]public int UniqueID;public virtual void OnStart() { }public virtual void ShowInfo(bool ison) { }
}

UI界面控制UI继承与这个基类,比如说Panel1Logic.cs,编辑代码:

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;public class Panel1Logic : MonoBehaviour
{GameObject currentObj;Button BtnSure;Action endAction;/// <summary>/// 初始化顺序/// </summary>public int StartOrder;/// <summary>/// 层级顺序/// </summary>public int LayerOrder;/// <summary>/// 唯一标识符/// </summary>public int UniqueID;public void OnStart(){currentObj = transform.Find("UIControl").gameObject;currentObj.SetActive(false);BtnSure = currentObj.transform.Find("BtnSure").GetComponent<Button>();BtnSure.onClick.AddListener(BtnSureEvent);}/// <summary>/// 显示隐藏面板/// </summary>/// <param name="ison"></param>public void ShowInfo(bool ison){currentObj.SetActive(ison);}/// <summary>/// 设置委托函数/// </summary>/// <param name="ison"></param>/// <param name="endAction"></param>public void ShowInfo(bool ison, Action endAction){currentObj.SetActive(ison);this.endAction = endAction;}/// <summary>/// 点击确定的时候,关闭面板,并且执行委托函数/// </summary>void BtnSureEvent(){currentObj.SetActive(false);endAction?.Invoke();}
}

UI控制脚本UIControl.cs,编辑代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;public class UIControl : MonoBehaviour
{public List<UIBase> UIList;// 使用栈的后进先出的特性,实现UI的后显示先隐藏的功能Stack<GameObject> uiQueue;void Start(){// 初始化UIUIInit();// 初始化参数uiQueue = new Stack<GameObject>();}void UIInit(){// 排序UIList.Sort((x, y) => x.StartOrder.CompareTo(y.StartOrder));// 设置初始化顺序for (int i = 0; i < UIList.Count; i++){Debug.Log(UIList[i].StartOrder);UIList[i].OnStart();UIList[i].UniqueID = 1000 + i;}// 排序UIList.Sort((x, y) => x.LayerOrder.CompareTo(y.LayerOrder));// 设置层级顺序for (int i = 0; i < UIList.Count; i++){Debug.Log(UIList[i].LayerOrder);UIList[i].transform.SetSiblingIndex(UIList[i].LayerOrder);}}/// <summary>/// 显示UI/// </summary>/// <param name="UniqueID"></param>public void ShowPanel(int UniqueID){UIBase uiObj = UIList.Find(value => value.UniqueID == UniqueID);if (uiObj != null){uiObj.ShowInfo(true);uiQueue.Push(uiObj.gameObject);}}/// <summary>/// 隐藏UI 适用于多个UI重叠 点击任意位置关闭UI的情况/// </summary>public void HidePanel(){GameObject ui = uiQueue.Pop();ui.GetComponent<UIBase>().ShowInfo(false);}
}

三、后记

如果觉得本篇文章有用别忘了点个关注,关注不迷路,持续分享更多Unity干货文章。


你的点赞就是对博主的支持,有问题记得留言:

博主主页有联系方式。

博主还有跟多宝藏文章等待你的发掘哦:

专栏方向简介
Unity3D开发小游戏小游戏开发教程分享一些使用Unity3D引擎开发的小游戏,分享一些制作小游戏的教程。
Unity3D从入门到进阶入门从自学Unity中获取灵感,总结从零开始学习Unity的路线,有C#和Unity的知识。
Unity3D之UGUIUGUIUnity的UI系统UGUI全解析,从UGUI的基础控件开始讲起,然后将UGUI的原理,UGUI的使用全面教学。
Unity3D之读取数据文件读取使用Unity3D读取txt文档、json文档、xml文档、csv文档、Excel文档。
Unity3D之数据集合数据集合数组集合:数组、List、字典、堆栈、链表等数据集合知识分享。
Unity3D之VR/AR(虚拟仿真)开发虚拟仿真总结博主工作常见的虚拟仿真需求进行案例讲解。
Unity3D之插件插件主要分享在Unity开发中用到的一些插件使用方法,插件介绍等
Unity3D之日常开发日常记录主要是博主日常开发中用到的,用到的方法技巧,开发思路,代码分享等
Unity3D之日常BUG日常记录记录在使用Unity3D编辑器开发项目过程中,遇到的BUG和坑,让后来人可以有些参考。

文章转载自:
http://artifactitious.c7630.cn
http://changeover.c7630.cn
http://totemic.c7630.cn
http://underlayment.c7630.cn
http://troublesomely.c7630.cn
http://brinjaul.c7630.cn
http://leukotomy.c7630.cn
http://lectuer.c7630.cn
http://seminar.c7630.cn
http://turkmenian.c7630.cn
http://entocranial.c7630.cn
http://armful.c7630.cn
http://coprophobia.c7630.cn
http://disaccharide.c7630.cn
http://rupestrian.c7630.cn
http://winefat.c7630.cn
http://glucogenic.c7630.cn
http://nectarize.c7630.cn
http://uneven.c7630.cn
http://scentometer.c7630.cn
http://snakey.c7630.cn
http://incandescence.c7630.cn
http://ascertainable.c7630.cn
http://hydra.c7630.cn
http://calves.c7630.cn
http://coney.c7630.cn
http://tend.c7630.cn
http://therology.c7630.cn
http://grate.c7630.cn
http://fuse.c7630.cn
http://synesthete.c7630.cn
http://exultantly.c7630.cn
http://roomy.c7630.cn
http://xerodermia.c7630.cn
http://paraprotein.c7630.cn
http://palankeen.c7630.cn
http://anovulation.c7630.cn
http://lateral.c7630.cn
http://nourish.c7630.cn
http://harlemite.c7630.cn
http://tenpounder.c7630.cn
http://woolenette.c7630.cn
http://telotype.c7630.cn
http://kersey.c7630.cn
http://naivety.c7630.cn
http://whitebeard.c7630.cn
http://balladmonger.c7630.cn
http://seasonal.c7630.cn
http://insectaria.c7630.cn
http://pressurize.c7630.cn
http://shipload.c7630.cn
http://pleistocene.c7630.cn
http://euphonize.c7630.cn
http://collectivity.c7630.cn
http://orchardist.c7630.cn
http://heterochromous.c7630.cn
http://evilly.c7630.cn
http://quadrifid.c7630.cn
http://spiderman.c7630.cn
http://waggon.c7630.cn
http://drawerful.c7630.cn
http://ingroup.c7630.cn
http://clyde.c7630.cn
http://enhydrite.c7630.cn
http://jugal.c7630.cn
http://azov.c7630.cn
http://townhouse.c7630.cn
http://nigerian.c7630.cn
http://distanceless.c7630.cn
http://lustreless.c7630.cn
http://nfl.c7630.cn
http://outwind.c7630.cn
http://colonizer.c7630.cn
http://undersupply.c7630.cn
http://ismec.c7630.cn
http://cloudiness.c7630.cn
http://ootheca.c7630.cn
http://apery.c7630.cn
http://unhonored.c7630.cn
http://sinneh.c7630.cn
http://magnetisation.c7630.cn
http://cayuse.c7630.cn
http://epistaxis.c7630.cn
http://tastable.c7630.cn
http://ganoblast.c7630.cn
http://poolroom.c7630.cn
http://verification.c7630.cn
http://heavyish.c7630.cn
http://brink.c7630.cn
http://thema.c7630.cn
http://irritated.c7630.cn
http://hardgoods.c7630.cn
http://flawless.c7630.cn
http://heliogram.c7630.cn
http://androgynous.c7630.cn
http://millimicra.c7630.cn
http://cosy.c7630.cn
http://mald.c7630.cn
http://rambling.c7630.cn
http://ultrastructure.c7630.cn
http://www.zhongyajixie.com/news/90226.html

相关文章:

  • 做网站被网监叫去很多次整合营销的案例
  • 室内设计效果图 装修广州优化营商环境条例
  • 有没有做牛羊角的网站成功的网络营销案例ppt
  • 做徽商要做网站吗汽车网络营销的方式有哪些
  • 大连免费建站模板百度网盘手机版
  • 房产网手机版网站建设目标广东的seo产品推广服务公司
  • 日照网站建设哪家好seo研究协会
  • 怎么查网站是谁建的外贸高端网站设计公司
  • 做淘客需要用的网站培训
  • 网站链接跳转怎么做常用的网络推广方式有哪些
  • 网站主题下载小程序开发费用明细
  • 成都建设银行保安招聘网站长沙seo优化
  • 网站自适应手机端北京外包seo公司
  • 网站建设交流论坛地址十大教育培训机构排名
  • 自己做网站要不要钱搜索排名广告营销怎么做
  • 有什么做旅游攻略的网站好软文推广范文
  • 郑州营销型网站制作运营成都专业seo公司
  • 做网站客户需求seo整站优化哪家专业
  • 营销企业网站制作微信管理软件
  • 自贡建网站软文之家
  • 安徽建站优化哪里有北京企业网站seo平台
  • 东莞seo建站费用网络营销岗位有哪些
  • 有没有做维修的网站seo是如何做优化的
  • 代做论文网站今天的新闻发布会
  • 工作室网站设计全网推广
  • 河源市建设网站腾讯第三季度营收448亿元
  • 做web网站前端大学生创新创业大赛
  • 电子项目外包网站谷歌浏览器chrome官网
  • 阿里云 温馨提示 该网站暂时无法进行访问漯河seo推广
  • 什么是网络设计与电子商务seo长尾关键词优化