Unity UI框架(一 窗口层级管理)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity UI框架(一 窗口层级管理)相关的知识,希望对你有一定的参考价值。

参考技术A

多个场景会反复出现相同的UI窗体,多个场景反复加载(复用)

   各个UI脚本之间的传值,容易交错,耦合度高(UI之间不相互联系,通过消息传递)

   要手工控制窗体中间的层级关系(使用栈结构保持控制当前所有需要显示的UI窗体)

   多个UI窗体之间相互叠加,容易出现误操作(对当前窗体遮挡处理)

   窗体自动加载管理

   语言的国际化

  

 尽量让框架本身完成与具体业务无关的事务性工作,让开发人员只需要专注游戏的业务逻辑

  

 开发最简版

   1.窗体自动加载管理

   2.缓存UI窗体

   3.窗体生命周期管理

  

 UI框架的核心类设计

   1.BaseUIForms基础UI窗体

   2.UIManager UI窗体管理

   3.UIType窗体类型

   4.SysDefine 系统定义类

  

 链接: https://pan.baidu.com/s/1-PomcmeBh2Up1S3iHWTHqQ

 

   提取码:41cf

   创建一些文件夹把贴图素材导入MyAtlas

   把脚本素材分别放到

   

                                          

 

  

 然后定义一个 UI基类

  

 还有一个UI管理类 先列举出字段

  

 然后搭设场景

                                          

 几个空节点还有UICamera

   Canvans设置 为按相机照射 UIScaleMode调整为宽高比例缩放match一般是0.5或者按高度适配

                                          

 相机处理设置为正交模式 照射层级只有UI 还有记得把相机往后拉一点点不然没有图片

                                                                                  

 然后再Nomal下创建这样的界面 记得定好锚点

   在Resources保存为预制体 到时候动态加载

                                          

 然后记得把UI相机的这个去掉

                                          

 然后添加常量名字

  

 在UIManager添加UI创建方法

  

 创建一个

                                          

 挂给我们的LoginUI预制体

   创一个空节点 挂上脚本

                                                                                  

 因为没设置窗口激活所以是隐藏的

                                          

 然后UI层级管理的话要用到栈 “先进后出”

   Stack<T>

                                          

 类似于收盘子洗盘子 羽毛球筒放进去拿出来

   还有类似于枪的弹夹

  

 然后UIManager添加方法 有些判断写反了 又改了改

  

 然后是把常量提取出来定义

  

 我又把他的监听类 添加Transform也可以传递 语法糖改为C#6

  

 UI基类封装常用方法

  

 提供一个方法类Find Add的封装

  

 然后拿去测试

   这里定义一些窗口的常量定义

  

 登录逻辑

  

 人物选择界面逻辑

为啥我在unity的层级里不能拖放东西

参考技术A 可以用Unity射线判断,也可以用其他插件仿照例子去做,例如:fingergesture 、easytouch 插件。<pre t="code" l="csharp">// 目前鼠标点击和手指拖拽的点击是通用的,代码在这里,你可以试试。

IEnumerator OnMouseDown()


Vector3 ScreenSpace = Camera.main.WorldToScreenPoint(transform.position);

Vector3 offset = transform.position-Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x,Input.mousePosition.y,ScreenSpace.z));

Debug.Log(;down;);

//当鼠标左键按下时
while(Input.GetMouseButton(0))

//得到现在鼠标的2维坐标系位置
Vector3 curScreenSpace = new Vector3(Input.mousePosition.x,Input.mousePosition.y,ScreenSpace.z);
//将当前鼠标的2维位置转化成三维的位置,再加上鼠标的移动量
Vector3 CurPosition = Camera.main.ScreenToWorldPoint(curScreenSpace)+offset;
//CurPosition就是物体应该的移动向量赋给transform的position属性
transform.position = CurPosition;
//这个很主要
yield return new WaitForFixedUpdate();


本回答被提问者采纳

以上是关于Unity UI框架(一 窗口层级管理)的主要内容,如果未能解决你的问题,请参考以下文章

游戏UI框架设计 : 窗体的层级管理

UI框架搭建DAY1

设计和开发一套简单自己主动化UI框架

Unity UI框架

unity客户端基本框架(转载)

Unity粒子在UI界面中的裁切蒙版层级问题的解决(ScrollView裁切Mask蒙版UI粒子层级关系)