UI(UGUI)框架(一)---------概述与保存/读取面板类型与路径
01.概念:管理场景中所有的面板,控制面板之间的跳转
02.项目层级目录:
Resources:存放UIPanel,习惯把所有的一个个面板做成预制源,使用时加载
Scenes:存放场景
UIFrameWork:单独的文件,存放UI框架的文件夹,方便以后导出给别的项目使用
架构图:
03.设计主菜单(将所有的面板设置为prefab)
canvas scales中UI scale model设置为 Constane Pixel Size表示窗口像素大小与实际运行的界面像素一样,但是UI组件比如Text不会改变(字体固定的)。
scale with screen size:随着屏幕的大小变化,所有的UI组件都会改变,分为根据高度与宽度适配,高度适配就是ui随着高度的变化而变化,宽度变化是不会影响UI的,设置match属性。
设置UI时按住shift:等比例缩放,ctrl:中心缩放
04.框架开发之保存面板信息(通过json和枚举)
层级结构:
首先创建面板枚举类UIPanelType(一个面板对应一个枚举成员):
1 usingUnityEngine;2 usingSystem.Collections;3 usingSystem;4 5 6 public enumUIPanelType {7 ItemMessage,8 Knapsack,9 MainMenu,10 Shop,11 Skill,12 System,13 Task14 }
创建文本文件,保存面板的类型和路径(这样面板只要放在Resources文件夹下,路径保存好可以随意放,写完一个Json文档后可以百度Json校验检查是否正确:http://www.json.cn/):
注意:因为用JsonUtility解析json文件,不是别数组的格式,要把数组包装成一个对象就是外面加{}。同时在VS编辑json文件一般会保存成以前的目录(如果你一直没有移动不会有问题,比如这个项目移动到了resource文件夹下,但是还是会保存在它初始创建的文件夹,这样识别的还是前面的文件,还是会有同样的错误)。
解析Json文件得到面板路径:
首先创建json脚本对应的类UIPanelInfo:
1 usingUnityEngine;2 usingSystem.Collections;3 usingSystem;4 //序列化:把内存上的东西放在硬盘上成为文本文件,命名空间using System;5 //ISerializationCallbackReceiver:接口,实现OnAfterDeserialize OnBeforeSerialize两个方法,与JsonUtility相对应,是其扩展自定义的内容 6 [Serializable]7 public classUIPanelInfo :ISerializationCallbackReceiver {8 [NonSerialized]9 //注意要跟json脚本里面的类型对应,否则无法解析,json文件就相当于UIPanelInfo类型数组 10 public UIPanelType panelType;//不能解析该类型,因此让其不序列化和反序列化 11 public stringpanelTypeString;12 //{13 //get//进行序列化14 //{15 //return panelType.ToString();16 //}17 //set//进行反序列化18 //{19 //UIPanelType type =(UIPanelType)System.Enum.Parse(typeof(UIPanelType), value);//写在这时候不会调用这个方法20 //panelType = type;21 //}22 //} 23 public stringpath;24 25 //反序列化成功会调用该方法 反序列化:从文本信息 到对象的过程 相当于set方法 26 public voidOnAfterDeserialize()27 {28 UIPanelType type = (UIPanelType)System.Enum.Parse(typeof(UIPanelType), panelTypeString);//把字符串转换成枚举类型,枚举类型无法使用as,只能强转 29 panelType =type;30 }31 //在序列化之前调用 相当于get方法 32 public voidOnBeforeSerialize()33 {34 35 }36 }
建立UIManager脚本读取面板类型和信息:
1 usingUnityEngine;2 usingSystem.Collections;3 usingSystem.Collections.Generic;4 usingSystem;5 6 public classUIManager {7 private Dictionary<UIPanelType, string> panelPathDict;//存储所有面板Prefab的路径 8 [Serializable]9 //UIPanelInfo类,json脚本整体对应的一个类,即解析json脚本得到就是这个类的对象 10 classUIPanelTypeJson11 {12 public List<UIPanelInfo>infoList;13 }14 private voidParseUIPanelTypeJson()15 {16 panelPathDict = new Dictionary<UIPanelType, string>();17 18 TextAsset ta = Resources.Load<TextAsset>("UIPanelType");//加载进来就是TextAsset类型 19 20 UIPanelTypeJson jsonObject = JsonUtility.FromJson<UIPanelTypeJson>(ta.text);//注意<>里面一定要传类,//会调用反序列化 序列化方法21 22 foreach (UIPanelInfo info injsonObject.infoList)23 {24 //Debug.Log(info.panelType); 25 panelPathDict.Add(info.panelType, info.path);//字典方便用类型找到路径 26 }27 }28 }
转载于:https://www.cnblogs.com/dsh20134584/p/7338671.html
UI(UGUI)框架(一)---------概述与保存/读取面板类型与路径相关推荐
- UI自动化框架 基于selenium+pytest和PO分层思想
最近在编写UI自动化框架,现在将一些碎片化东西进行梳理,便于记忆 同时,为了方便于各个模块的独立管理,以及秉承高复用,低耦合的思想,这里是根据PO模型编写,同时将所有的模块进行了独立,页面和元素,以及 ...
- python(十二)Uiautomator2搭建UI自动化框架实战
前言 由于公司UI自动化框架底层用的是Uiautomator2,所以我就用Uiautomator2搭了一套UI自动化框架,并运用某软件做了一个实战,思路其实和之前写的Appnium一样的 ps:这里其 ...
- 测试开发 - 十年磨一剑(五)UI自动化测试框架与分层结构
一.UI自动化测试框架 Selenium是自动化工具,工具,工具!面试的时候不想再听到谁说用的测试框架是Selenium. 构成框架的组件,最起码应该具备以下的功能,才能够称为一个完整的自动化测试框架 ...
- UI自动化框架思路整理(Python+selenium+unittest+html)
本文主要以PO思想将页面元素和代码分离,以及执行多用例的UI自动化框架. 下图是整个框架图: 在准备测试一个功能时,我们可以通过手工去测,也可以用UI自动化框架去实现多用例的操作. 自动化框架思路:在 ...
- UI自动化测试框架搭建——标记性能较差用例
在拿到性能数据后需要将数据利用起来,下面对性能数据进行分析 实现:如果性能达到设定的阈值,那么这段时间执行的用例就是性能较差的用例 确定阈值 首先确定一个阈值来当做性能的告警值,暂定为以下算法 # t ...
- UI自动化测试框架搭建-标记性能较差用例
在拿到性能数据后需要将数据利用起来,下面对性能数据进行分析 实现:如果性能达到设定的阈值,那么这段时间执行的用例就是性能较差的用例 确定阈值 首先确定一个阈值来当做性能的告警值,暂定为以下算法 # t ...
- 20.UI自动化测试框架搭建-标记性能较差用例
在拿到性能数据后需要将数据利用起来,下面对性能数据进行分析 实现:如果性能达到设定的阈值,那么这段时间执行的用例就是性能较差的用例 确定阈值 首先确定一个阈值来当做性能的告警值,暂定为以下算法 # t ...
- python3.7界面设计_基于selenium+Python3.7+yaml+Robot Framework的UI自动化测试框架
前端自动化测试框架 项目说明 本框架是一套基于selenium+Python3.7+yaml+Robot Framework而设计的数据驱动UI自动化测试框架,Robot Framework 作为执行 ...
- python ui自动化测试框架_基于python语言下的UI自动化测试框架搭建(一)
最近在搭一个UI自动化测试框架,想把整个搭建过程分享出来,如果有不对的地方,希望大家能够指正,首先创建一个名称为,antomation_framework_demo的工程文件, pycharm中工程及 ...
最新文章
- 图解Win32汇编字符串和Debug输出
- PHP项目部署在tomcat,在Tomcat中部署Web项目的操作方法(必看篇)
- 等压线上怎么画风向_战场上骑兵应该怎么拔刀?从清人佩刀为何总是刀柄向后说起...
- Python编程从入门到实践~异常
- 由 go orm 引发的探索
- java 声明静态类,为什么你不能在Java中将类声明为静态?
- BeanPropertyRowMapper使用注意事项
- 【传输文件】文件传输协议FTP、SFTP和SCP
- html 按键hover,按钮hover效果
- 使用windows 10 安装中文版语言
- 电源大师课笔记 2.5
- sqlmap安装总结
- hevc参考代码matlab版,HEVC部分源码剖析
- 计算机网络面试需要掌握的知识点汇总
- python解决约瑟夫问题
- storm java 例子_Storm 运行例子
- 两个相离圆上各取一点P、Q,求线段PQ中点M的轨迹。
- wordpress文章自动同步天涯博客插件wp2Tianya发布
- 生活中的统计概率思维
- 金华职业技术学院计算机教研室主任,机械技术系主任及教师赴金华职业技术学院走访调研...
热门文章
- 在Linux上使用AFL对Stagefright进行模糊测试
- Android6.0 wakelock深入分析
- 三星t800Android 6.0,6.6毫米品质平板 三星GALAXY Tab S发布
- Qt模型、视图解读之视图
- java文本框背景_background 设置文本框背景图
- shell读取excel_[PHP 开源类库]simple-Excel — 兼具优雅与性能的Excel和CSV文件读写工具...
- echarts柱状图显示百分比_Echarts 饼状图显示信息,内容,值,百分比都显示的代码 更改图例等问题汇总...
- hdu3694(四边形的费马点)
- BZOJ 4006 Luogu P3264 [JLOI2015]管道连接 (斯坦纳树、状压DP)
- php swool协程,swoole如何实现协程