一、消息框架概述

二、UI框架实现

(1)导入之前的框架,并创建3个新的脚本:UIManager、UIControl、UIController。

UIManager

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class UIManager : ManageBase<UIManager>
{//控制器字典public Dictionary<string, UIController> UIControllerDic = new Dictionary<string, UIController>();//設置頁面激活狀態public void SetActive(string controllerName,bool active){transform.Find(controllerName).gameObject.SetActive(active);}//获取页面上的子控件public UIControl GetUIControl(string controllerName,string controlName){if (UIControllerDic.ContainsKey(controllerName)){//寻找页面中的子控件if (UIControllerDic[controllerName].UIControlDic.ContainsKey(controlName)){return UIControllerDic[controllerName].UIControlDic[controlName];}}return null;}
}

UIControl

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;public class UIControl : MonoBehaviour
{public UIController controller;private void Awake(){//向上层检查,赋值父控制器if (transform.parent != null){controller = transform.GetComponentInParent<UIController>();//将自身控件添加到父控制器中if (controller != null){controller.UIControlDic.Add(transform.name,this);}}}//更改文本public void ChageText(string str){if (GetComponent<Text>() != null){GetComponent<Text>().text = str;}}//更改图片public void ChangeImage(Sprite sprite){if (GetComponent<Image>() != null){GetComponent<Image>().sprite = sprite;}}//按钮public void AddButtonClickEvent(UnityAction action){Button control = GetComponent<Button>();if (control != null){control.onClick.AddListener(action);}}//滑动条public void AddSliderEvent(UnityAction<float> action){Slider control = GetComponent<Slider>();if (control!= null){control.onValueChanged.AddListener(action);}}//InputFieldpublic void InputFieldEvent(UnityAction<string> action){InputField control = GetComponent<InputField>();if (control != null){control.onValueChanged.AddListener(action);}}
}

UIController

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class UIController : MonoBehaviour
{public Dictionary<string, UIControl> UIControlDic = new Dictionary<string, UIControl>();void Awake(){//将当前的页面控制器添加到管理器字典中UIManager.Instance.UIControllerDic.Add(transform.name, this);//给子控件添加UIControl脚本foreach(Transform tran in transform){if (tran.gameObject.GetComponent<UIControl>() == null){tran.gameObject.AddComponent<UIControl>();}}}
}

(2)再创建这些脚本挂载到对应的UI上

MainControl:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class MainController : UIController
{// Start is called before the first frame updatevoid Start(){//给按钮添加事件UIManager.Instance.GetUIControl(transform.name,"MenuButton").AddButtonClickEvent(ShowMenu);}void ShowMenu(){UIManager.Instance.SetActive("MenuController", true);gameObject.SetActive(false);}}

StateController

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class StateController : UIController
{// Start is called before the first frame updatevoid Start(){UIManager.Instance.GetUIControl(transform.name, "CloseButton (1)").AddButtonClickEvent(Close);}void Close(){UIManager.Instance.SetActive("MenuController", true);gameObject.SetActive(false);}
}

ItemController

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class ItemController : UIController
{// Start is called before the first frame updatevoid Start(){UIManager.Instance.GetUIControl(transform.name, "CloseButton (2)").AddButtonClickEvent(Close);}// Update is called once per framevoid Close(){UIManager.Instance.SetActive("MenuController",true);gameObject.SetActive(false);}
}

MenuController

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class MenuController :UIController
{// Start is called before the first frame updatevoid Start(){UIManager.Instance.GetUIControl(transform.name, "StateButton").AddButtonClickEvent(ShowStateController);UIManager.Instance.GetUIControl(transform.name, "ItemButton").AddButtonClickEvent(ShowItemController);UIManager.Instance.GetUIControl(transform.name, "CloseButton").AddButtonClickEvent(Close);UIManager.Instance.GetUIControl(transform.name, "SkillButton").AddButtonClickEvent(ShowSkillController);}// Update is called once per framevoid ShowStateController(){UIManager.Instance.SetActive("StateController", true);gameObject.SetActive(false);}void ShowItemController(){UIManager.Instance.SetActive("ItemController", true);gameObject.SetActive(false);}void ShowSkillController(){UIManager.Instance.SetActive("SkillController", true);gameObject.SetActive(false);}void Close(){UIManager.Instance.SetActive("MainController", true);gameObject.SetActive(false);}
}

SkillController

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class SkillController : UIController
{// Start is called before the first frame updatevoid Start(){UIManager.Instance.GetUIControl(transform.name, "Button (Legacy)").AddButtonClickEvent(Close);}// Update is called once per framevoid Close(){UIManager.Instance.SetActive("MenuController",true);gameObject.SetActive(false);}
}

(3)这样就是一个完整的UI框架了

Unity进阶第四章-UI框架相关推荐

  1. 【JAVA SE】第十四章 集合框架、语法糖和泛型

    第十四章 集合框架.语法糖和泛型 文章目录 第十四章 集合框架.语法糖和泛型 一.集合框架 1.概念 2.接口 二.语法糖 1.概念 2.解语法糖 三.泛型 1.概念 2.泛型类 3.泛型接口 4.泛 ...

  2. 浅入浅出 Android 安全:第四章 Android 框架层安全

    第四章 Android 框架层安全 来源:Yury Zhauniarovich | Publications 译者:飞龙 协议:CC BY-NC-SA 4.0 如我们在第1.2节中所描述的那样,应用程 ...

  3. python爬虫从入门到实战笔记——第四章Scrapy框架

    推荐阅读: python爬虫从入门到实战笔记--第一章爬虫原理和数据爬取 python爬虫从入门到实战笔记--第二章非结构化数据和结构化数据的提取 python爬虫从入门到实战笔记--第三章动态HTM ...

  4. Springboot单体架构搭建|第四章 前端框架选择和菜单管理

    第四章 前端框架选择和菜单管理 前言 vue-element-admin 改造vue-element-admin 菜单管理 用户&&角色&&菜单 总结 前言 该架构是参 ...

  5. jQuery系列 第四章 jQuery框架的选择器

    第四章 jQuery框架的选择器 4.1 jQuery选择器说明 jQuery 最核心的组成部分就是选择器引擎.它完全继承了 CSS 的风格,可以对 DOM 元 素的标签名.属性名.状态等进行快速准确 ...

  6. JAVA基础第四章-集合框架Collection篇

    业内经常说的一句话是不要重复造轮子,但是有时候,只有自己造一个轮子了,才会深刻明白什么样的轮子适合山路,什么样的轮子适合平地! 我将会持续更新java基础知识,欢迎关注. 往期章节: JAVA基础第一 ...

  7. Unity进阶第三章-有限状态机FSM(三种方法实现角色动画操作)

    一.有限状态机FSM概述 二.不用有限状态机实现角色的走路.攻击动作 (1)新建角色.地面.为角色添加动画 (2)为角色添加脚本 using System.Collections; using Sys ...

  8. Unity进阶第五章-声音管理器

    (1)创建Managers和AudioManager两个脚本 (2)AudioManager: using System.Collections; using System.Collections.G ...

  9. unity 前端场景搭建UI框架的设计

    在 Unity 前端场景中搭建 UI 框架时,可以采用以下设计方案: 基础组件库:设计一套基础组件库,包括常用的 UI 控件,如文本.按钮.图像等,组件库的设计应该尽量简单易用,方便开发者快速搭建 U ...

最新文章

  1. error: '__gnu_cxx::_Lock_policy' has not been declared
  2. 安卓中AIDL的使用方法快速入门
  3. 用java实现二分搜索算法分析
  4. 嵌入式NVR发展浅析
  5. [Leedcode][JAVA][第560题][和为K的子数组][Hashmap][数组]
  6. Java多线程学习三:有哪几种实现生产者消费者模式的方法
  7. Linux x86-64 IOMMU详解(三)——Intel IOMMU(硬件IOMMU)的功能与基本原理
  8. 地理空间数据云 如何预约下载数据 Landsat8
  9. java 验证码框架_Java验证码开源框架:jcaptcha
  10. 云计算现在好就业吗?薪资怎么样?
  11. 荣耀Magicbook安装黑苹果教程(OpenCore引导)
  12. Android学习笔记(四十):Preference的使用
  13. Android OS历史版本
  14. 线性代数之——消元法
  15. 服务器遭到newinit.sh木马挖矿攻击记录
  16. 一日一技:用Python绘画有多好玩
  17. Android 7.0配置fileprovider共享文件 解决FileUriExposedException
  18. LoRa笔记03 LoRa sx1276 sx1278空中唤醒研究
  19. CLIP论文笔记--《Learning Transferable Visual Models From Natural Language Supervision》
  20. 浅谈CSS background参数 属性。

热门文章

  1. 国家信息安全水平考试(NISP一级)考试题库4
  2. 计算机硬盘分区win7,小编教你win7硬盘如何分区
  3. 前端开发如何选择培训机构
  4. Android Zip解压缩类处理中文名乱码
  5. 学习笔记——popen()函数详解
  6. Python 利用深度学习做文本摘要
  7. 对于unsigned的数据类型
  8. inspect python模块_python常用模块-inspect模块
  9. VR全景的应用以及优势
  10. 小火箭服务器订阅没显示节点,有zookeeper相关的大神么?使用ZKClient创建节点,但是服务器中并没有显示?...