国外的有趣设计网站,番禺建网站,如何建设国外的网站,上海做网站好的公司#x1f468;#x1f4bb;个人主页#xff1a;元宇宙-秩沅
#x1f468;#x1f4bb; hallo 欢迎 点赞#x1f44d; 收藏⭐ 留言#x1f4dd; 加关注✅!
#x1f468;#x1f4bb; 本文由 秩沅 原创
#x1f468;#x1f4bb; 收录于专栏#xff1a;UI_… 个人主页元宇宙-秩沅
hallo 欢迎 点赞 收藏⭐ 留言 加关注✅!
本文由 秩沅 原创
收录于专栏UI_Unity专栏 ⭐UI程序袁⭐ 文章目录 ⭐UI程序袁⭐前言1开始面板LoginPanel 脚本2提示面板TipPanel 脚本优化后的面板基类BasePanel优化后的Mono管理器 ⭐相关文章⭐ 前言 ️ **** 1开始面板LoginPanel 脚本 using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;
//-------------------------------------
//—————————————————————————————————————
//___________项目: ______________
//___________功能 开始面板
//___________创建者秩沅_______________
//_____________________________________
//-------------------------------------
public class LoginPanel : BasePanel
{private CanvasGroup PanelGroup;// Start is called before the first frame updateprivate void Awake(){PanelGroup GetComponentCanvasGroup();if (!PanelGroup){PanelGroup gameObject.AddComponentCanvasGroup();}}protected override void Start(){base.Start();AllEvent();}/// summary/// 重写隐藏方法/// /summarypublic override void HideMe(){Fade(false, PanelGroup);//进行淡出的效果base.HideMe();}/// summary/// 添加控件监听事件/// /summaryprivate void AllEvent(){try{GetControlButton(ButtonS).onClick.AddListener(() {Debug.Log(GetControlInputField(InputAC).text);//如果账号密码为空if (GetControlInputField(InputAC).text GetControlInputField(InputAC).text ){ UIManager.GetInstance().ShowPanelTipPanel(TipPanel); //显示提示面板}});}catch{Debug.Log(没有获取到);}}
} 2提示面板TipPanel 脚本 using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;
//-------------------------------------
//—————————————————————————————————————
//___________项目:
//___________功能 提示面板
//___________创建者_______秩沅_____
//_____________________________________
//-------------------------------------public class TipPanel : BasePanel
{private CanvasGroup PanelGroup;private UnityAction evnetListen ;private void Awake(){PanelGroup GetComponentCanvasGroup();if (!PanelGroup){PanelGroup gameObject.AddComponentCanvasGroup();}}protected override void Start(){base.Start();//添加点击事件GetControlButton(BtuSure).onClick.AddListener((){UIManager.GetInstance().RemovePanel(TipPanel);});}/// summary/// 重写的显示方法/// /summarypublic override void ShowMe(){Fade(true, PanelGroup);base.ShowMe();}/// summary/// 重写的隐藏方法/// /summarypublic override void HideMe(){Fade(false, PanelGroup);base.HideMe();}/// summary/// 提供给外部改变提示文本内容的方法/// /summary/// param namecomponent/parampublic void ChangComponent(string component){GetControlText(ContentText).text component;}
} 优化后的面板基类BasePanel using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;/// summary
/// 面板基类
/// 帮助我门通过代码快速的找到所有的子控件
/// 方便我们在子类中处理逻辑
/// 节约找控件的工作量
/// /summary
public class BasePanel : MonoBehaviour
{//通过里式转换原则 来存储所有的控件private Dictionarystring, ListUIBehaviour controlDic new Dictionarystring, ListUIBehaviour();// Use this for initializationprotected virtual void Start (){FindChildrenControlButton();FindChildrenControlImage();FindChildrenControlText();FindChildrenControlToggle();FindChildrenControlSlider();FindChildrenControlScrollRect();FindChildrenControlInputField();}/// summary/// 显示自己/// /summarypublic virtual void ShowMe(){gameObject.SetActive(true);}/// summary/// 隐藏自己/// /summarypublic virtual void HideMe(){gameObject.SetActive(false);}/// summary/// 销毁自己/// /summarypublic virtual void RemoveMe(){Destroy(gameObject);}/// summary/// 得到对应名字的对应控件脚本/// /summary/// typeparam nameT/typeparam/// param namecontrolName/param/// returns/returnsprotected T GetControlT(string controlName) where T : UIBehaviour{if(controlDic.ContainsKey(controlName)){for( int i 0; i controlDic[controlName].Count; i ){if (controlDic[controlName][i] is T){Debug.Log(获取到了 controlName);return controlDic[controlName][i] as T;}else{Debug.Log(未获取到 );}}}return null;}/// summary/// 找到面板中子对象的对应控件/// /summary/// typeparam nameT/typeparamprivate void FindChildrenControlT() where T:UIBehaviour{//把相同类型的空间脚本存储在数组当中T[] controls this.GetComponentsInChildrenT(); for (int i 0; i controls.Length; i){string objName controls[i].gameObject.name;if (controlDic.ContainsKey(objName))controlDic[objName].Add(controls[i]);elsecontrolDic.Add(objName, new ListUIBehaviour() { controls[i] });//那如果包含多个相同的空间并且每个空间执行的逻辑都不一样那该怎么优化觉得还是取消这个代码好//除非在这些相同的控件中执行的功能都是一样的//如果是按钮控件//if(controls[i] is Button)//{// (controls[i] as Button).onClick.AddListener(()// {// OnClick(objName);// });//}如果是单选框或者多选框//else if(controls[i] is Toggle)//{// (controls[i] as Toggle).onValueChanged.AddListener((value) // {// OnValueChanged(objName, value);// });//}}}/// summary/// 淡入淡出的效果/// /summarypublic void Fade( bool flag , CanvasGroup Panel){if (flag){Panel.alpha 0;MonoManager.GetInstance().RemoveUpdateListener(fadeOut);MonoManager.GetInstance().AddUpdateListener(fadeIn, () {if(Panel ! null )Panel.alpha Mathf.Lerp(Panel.alpha, 1, Time.deltaTime * 5);});}else{MonoManager.GetInstance().RemoveUpdateListener(fadeIn);MonoManager.GetInstance().AddUpdateListener(fadeOut, () {if (Panel ! null)Panel.alpha Mathf.Lerp(Panel.alpha, 0, Time.deltaTime * 5);});}}} 优化后的Mono管理器 using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using UnityEngine;
using UnityEngine.Events;public class MonoManager : SingleManagerMonoManager
{private MonoController controller;public MonoManager(){//保证了MonoController对象的唯一性GameObject obj new GameObject(MonoController);controller obj.AddComponentMonoController();}/// summary/// 给外部提供的 添加帧更新事件的函数/// /summary/// param namefun/parampublic void AddUpdateListener(string name ,UnityAction fun){controller.AddUpdateListener(name,fun);}/// summary/// 提供给外部 用于移除帧更新事件函数/// /summary/// param namefun/parampublic void RemoveUpdateListener(string name){controller.RemoveUpdateListener(name);}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;public class MonoController : MonoBehaviour {private Dictionarystring, UnityAction eventDic new Dictionarystring, UnityAction();// Use this for initializationvoid Start () {DontDestroyOnLoad(this.gameObject);}// Update is called once per framevoid Update () {foreach( UnityAction monoEvent in eventDic.Values ){if (monoEvent ! null)monoEvent();}}/// summary/// 给外部提供的 添加帧更新事件的函数/// /summary/// param namefun/parampublic void AddUpdateListener(string name ,UnityAction fun){if(eventDic.ContainsKey(name)){eventDic[name] fun;}else{if(fun ! null )eventDic.Add(name, fun);}// updateEvent fun;}/// summary/// 提供给外部 用于移除帧更新事件函数/// /summary/// param namefun/parampublic void RemoveUpdateListener(string name){if (eventDic.ContainsKey(name)){eventDic.Remove(name);}else{Debug.Log(未添加过该事件);}}
} ⭐相关文章⭐ ⭐ 软件设计师高频考点大全⭐
⭐ unity之c#专题篇—系统强基⭐ 你们的点赞 收藏⭐ 留言 关注✅是我持续创作输出优质内容的最大动力