Unity进阶第四章-UI框架
一、消息框架概述
二、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框架相关推荐
- 【JAVA SE】第十四章 集合框架、语法糖和泛型
第十四章 集合框架.语法糖和泛型 文章目录 第十四章 集合框架.语法糖和泛型 一.集合框架 1.概念 2.接口 二.语法糖 1.概念 2.解语法糖 三.泛型 1.概念 2.泛型类 3.泛型接口 4.泛 ...
- 浅入浅出 Android 安全:第四章 Android 框架层安全
第四章 Android 框架层安全 来源:Yury Zhauniarovich | Publications 译者:飞龙 协议:CC BY-NC-SA 4.0 如我们在第1.2节中所描述的那样,应用程 ...
- python爬虫从入门到实战笔记——第四章Scrapy框架
推荐阅读: python爬虫从入门到实战笔记--第一章爬虫原理和数据爬取 python爬虫从入门到实战笔记--第二章非结构化数据和结构化数据的提取 python爬虫从入门到实战笔记--第三章动态HTM ...
- Springboot单体架构搭建|第四章 前端框架选择和菜单管理
第四章 前端框架选择和菜单管理 前言 vue-element-admin 改造vue-element-admin 菜单管理 用户&&角色&&菜单 总结 前言 该架构是参 ...
- jQuery系列 第四章 jQuery框架的选择器
第四章 jQuery框架的选择器 4.1 jQuery选择器说明 jQuery 最核心的组成部分就是选择器引擎.它完全继承了 CSS 的风格,可以对 DOM 元 素的标签名.属性名.状态等进行快速准确 ...
- JAVA基础第四章-集合框架Collection篇
业内经常说的一句话是不要重复造轮子,但是有时候,只有自己造一个轮子了,才会深刻明白什么样的轮子适合山路,什么样的轮子适合平地! 我将会持续更新java基础知识,欢迎关注. 往期章节: JAVA基础第一 ...
- Unity进阶第三章-有限状态机FSM(三种方法实现角色动画操作)
一.有限状态机FSM概述 二.不用有限状态机实现角色的走路.攻击动作 (1)新建角色.地面.为角色添加动画 (2)为角色添加脚本 using System.Collections; using Sys ...
- Unity进阶第五章-声音管理器
(1)创建Managers和AudioManager两个脚本 (2)AudioManager: using System.Collections; using System.Collections.G ...
- unity 前端场景搭建UI框架的设计
在 Unity 前端场景中搭建 UI 框架时,可以采用以下设计方案: 基础组件库:设计一套基础组件库,包括常用的 UI 控件,如文本.按钮.图像等,组件库的设计应该尽量简单易用,方便开发者快速搭建 U ...
最新文章
- error: '__gnu_cxx::_Lock_policy' has not been declared
- 安卓中AIDL的使用方法快速入门
- 用java实现二分搜索算法分析
- 嵌入式NVR发展浅析
- [Leedcode][JAVA][第560题][和为K的子数组][Hashmap][数组]
- Java多线程学习三:有哪几种实现生产者消费者模式的方法
- Linux x86-64 IOMMU详解(三)——Intel IOMMU(硬件IOMMU)的功能与基本原理
- 地理空间数据云 如何预约下载数据 Landsat8
- java 验证码框架_Java验证码开源框架:jcaptcha
- 云计算现在好就业吗?薪资怎么样?
- 荣耀Magicbook安装黑苹果教程(OpenCore引导)
- Android学习笔记(四十):Preference的使用
- Android OS历史版本
- 线性代数之——消元法
- 服务器遭到newinit.sh木马挖矿攻击记录
- 一日一技:用Python绘画有多好玩
- Android 7.0配置fileprovider共享文件 解决FileUriExposedException
- LoRa笔记03 LoRa sx1276 sx1278空中唤醒研究
- CLIP论文笔记--《Learning Transferable Visual Models From Natural Language Supervision》
- 浅谈CSS background参数 属性。
热门文章
- 国家信息安全水平考试(NISP一级)考试题库4
- 计算机硬盘分区win7,小编教你win7硬盘如何分区
- 前端开发如何选择培训机构
- Android Zip解压缩类处理中文名乱码
- 学习笔记——popen()函数详解
- Python 利用深度学习做文本摘要
- 对于unsigned的数据类型
- inspect python模块_python常用模块-inspect模块
- VR全景的应用以及优势
- 小火箭服务器订阅没显示节点,有zookeeper相关的大神么?使用ZKClient创建节点,但是服务器中并没有显示?...