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框架(一 窗口层级管理)的主要内容,如果未能解决你的问题,请参考以下文章