Unity-UGUI
1. 基本内容
- UGUI部分控件支持检测控件值改变,入参Single为float类型,选择最上方Dynamic中的方法
- 按下ALT键再选择适配UI方式,即可将子物体适应到父物体对应合适位置与大小
- 拖动子物体四花瓣位置直到容纳该物体,即可实现子物体大小与父物体位置、大小保持相对比例
- 在检查器右方 : 处切换DEBUG模式,可以查看物体相对坐标,锚点坐标。
相对坐标:物体相对于锚点的坐标
锚点坐标:锚点相对于父物体的坐标
因此修改UI位置时,相对坐标修改尽量使用锚点坐标进行修改。 - 获取UI组件宽高:
transform.GetComponent<RectTransform>().rect.width
- 左为蓝图模式:物体操纵大小不会受到缩放影响
右为原始编辑模式:改变物体轴心点时,不再修改轴心点而是改为修改物体位置代替
2. 基本内容
- Canvas三种类型:界面顶部、摄像机指定位置、世界空间显示(需指定渲染它的摄像机)
- Canvas Scaler:
恒定像素大小时,缩放系数表示画布的整体缩放大小
屏幕大小缩放时,根据参考分辨率配置屏幕。屏幕匹配:依赖宽高、向外扩展,向内收缩。
每单位参考像素越小,UI设置成原生大小时渲染的大小越小 - GraphicRaycaster用于UI层的射线检测。
忽略保留图形启用时,如果UI图像已经正反翻转了,那么它将不再射线检测。
阻塞对象选定时,决定UI在 摄像机指定位置、世界空间显示 情况下,当2D、3D有碰撞体的物体在UI层之上时,哪种不允许射线穿透点击。
阻塞遮罩决定了阻塞对象发生时,阻塞物体的条件层级。 - CanvasGroup组件功能分别为:透明度、按钮可用性、射线检测、忽略父级的CanvasGroup组件
3. 功能控件
- Button控件
Unity的按钮获取焦点后,点击空格或回车键,也可以调用按钮监控事件,这是因为Button组件的navigation被默认为Automatic,若改成None可禁止该行为。
Navigation(按钮导航):
在EventSystem中,存在一个当前被选中按钮,我们可以通过代码按下的上下左右,使被选中按钮进行更改。
方法 | 描述 |
---|---|
None(关闭) | 关闭导航。 |
Automatic(自动导航) | 自动识别最近的一个控件并导航到下一个控件。 |
Horizontal(水平导航) | 水平方向导航到下一个控件。 |
Vertical(垂直导航) | 垂直方向导航到下一个控件。 |
Explicit(指定导航) | 特别指定在按下特定方向键时从此按钮导航到哪一个控件。 |
方法 | 描述 |
---|---|
onClick.AddListener() | 添加监听点击的事件 |
- Slider控件
方法 | 描述 |
---|---|
onValueChanged.AddListener(float) | 添加监听值改变的事件 |
minvalue、maxvalue 设置最大、最小值
整数决定是否仅限整数
- Dropdown控件
方法 | 描述 |
---|---|
onValueChanged.AddListener(int) | 添加监听值改变的事件 |
Dropdown的选项列表中可以设置每个选项的对应的图像。
需在Dropdown子对象中新建一个image放在标题图像上,再在Template对象中新建一个image放在项图像上
- Toggle控件
方法 | 描述 |
---|---|
onValueChanged.AddListener(bool) | 添加监听值改变的事件 |
ToggleGroup组件
Allow Switch Off:允许管理的开关列表中一个也未被点击。
RawImage控件
允许图像局部显示,即只显示图像的一小部分。
UV矩形:x,y偏移比,wh宽高显示比
资源中右键新建渲染器纹理,在摄像机中赋值该纹理,再为 RawImage 也赋值该纹理,即可实现在UI面板中显示摄像机画面的效果。该功能可用于实现在UI面板中显示3D模型InputField控件
内容自定义时的验证:
直线类型:单行、回车键提交、回车键换行
输入类型:主要区分是否为密码
键盘类型:用于移动端提示系统这里输入的类型来弹出输入框
角色验证:输入规则限制布局组件
子力扩展会在空间内自动平分内部元素
控制子对象大小会令子对象充满内容,必须与子力扩展共同使用
为子对象添加LayoutElement,这样就可让子对象不在受控于父对象的布局组件
LayoutElement(依赖于布局组件):最小宽高(底线,优先于父组件的宽高布局)、优先选择的宽高(次级)、扩展倍率(最低级)AspectRatioFitter 宽高比适配器
控制图像宽高比为固定值
纵横模式:通过宽、高度控制高宽度、在父物体内、外部的宽高比Selectable 选择(聚焦)控件
可实现接口ISelectHandler, IDeselectHandler, IUpdateSelectedHandlerI,IScrollHandler, ISubmitHandler, ICancelHandler, IMoveHandler
完成对选择控件的使用
IScrollHandler 滚轮
ISubmitHandler 提交
ICancelHandler 取消
IMoveHandler 移动LayoutRebuilder.ForceRebuildLayoutImmediate
重新计算布局
4. 事件系统
若要使用此系统,需先引用:
using UnityEngine.EventSystems;
,并继承接口。
IPointerEnterHandler:指针进入
IPointerExitHandler:指针离开
IDragHandler:拖拽中
IInitializePotentialDragHandler:开始拖拽(点击时)
IBeginDragHandler:开始拖拽(拖动时)若想非UI也可以使用这些系统,那么需要给摄像机挂载Physics Raycaster或Physics 2D Raycaster
EventSystem.current.IsPointerOverGameObject() 当鼠标在UGUI上时,该数值为True,如果取消射线勾选,那么该UI不会被判定,
EventSystem.current.SetSelectedGameObject()
设置选中的对象
方法 | 描述 | 需要继承类 |
---|---|---|
OnPointerDown(PointerEventData) | 鼠标落下事件 | IPointerDownHandler |
OnPointerUp(PointerEventData) | 鼠标抬起事件 | IPointerUpHandler |
OnPointerEnter(PointerEventData) | 鼠标进入事件 | IPointerEnterHandler |
OnPointerExit(PointerEventData) | 鼠标离开事件 | IPointerExitHandler |
OnPointerClick(PointerEventData) | 鼠标点击事件 | IPointerClickHandler |
注:如果父物体实现了Up、Down接口,而子物体没有实现。点击子物体时会调用父物体的Up、Down函数
- 代码添加事件
// 初始化列表
EventTrigger trigger = gameObject.AddComponent<EventTrigger>();
trigger.triggers = new List<EventTrigger.Entry>();
// 新建一个点击事件,并添加callback
EventTrigger.Entry entry = new EventTrigger.Entry();
entry.eventID = EventTriggerType.PointerClick;
entry.callback = new EventTrigger.TriggerEvent();
entry.callback.AddListener((data) => Debug.Log("点击了"));
// 添加到列表
trigger.triggers.Add(entry);
- 通过点击的位置获取世界坐标
public void OnPointerClick(PointerEventData eventData)
{var rect = GetComponent<RectTransform>();Vector3 v3;RectTransformUtility.ScreenPointToWorldPointInRectangle(rect, eventData.position, eventData.enterEventCamera, out v3);Debug.Log(v3);
}
5. 决定UI渲染层级的四种因素
- Camera层级
- 排序图层
- 图层顺序
- 自然层级
注意,如果为子对象添加Canvas组件,并添加GraphicRaycaster,即可覆盖原本排序图层逻辑,当想要对象无视自然层级排列时,可采用此方法解决。
Unity-UGUI相关推荐
- Unity UGUI Rect
Unity UGUI Rect rect.x与rect.y rect.min和rect.max rect.center rect.x与rect.y x,y就是rect类的根坐标,有了它我们就能确定我们 ...
- Unity UGUI Button 中文详解-Chinar
Chinar blog :www.chinar.xin Unity UGUI 完整系列教程 (Chinar中文图解) Unity UGUI Button 组件 本文提供全流程,中文翻译. Chinar ...
- Unity UGUI Batches合批规则详解(含源码)
Unity UGUI Batches合批规则详解 在处理UGUI DrawCall问题的时候,我们经常遇到各式各样的问题. 问题1:在处理UGUI合批的时候,发现了一个面板父节点发生旋转,底下的UI合 ...
- 【游戏开发实战】Unity UGUI Text图文混排(聊天文字混表情),支持动态表情,出招吧表情帝
文章目录 一.前言 二.最终效果 三.具体使用 1.导入表情素材 2.设置图片格式 3.生成表情图集 4.UI-EmojiFont.shader 5.材质球 四.测试 五.结束语 一.前言 点关注不迷 ...
- Unity UGUI实现图文混排
目前在unity实现图文混排的好像都是通过自定义字体然后在文本获取字符的位置,用图片替换掉图片标签,这样对于支持英文来说,并没有什么影响.然后对于中文来说就是一个相当麻烦的事了,毕竟图文混排多用于游戏 ...
- Unity UGUI图文混排源码(二)
Unity UGUI图文混排源码(一):http://blog.csdn.net/qq992817263/article/details/51112304 Unity UGUI图文混排源码(二):ht ...
- Unity UGUI基础 之 Scroll View/Scroll Rect 的简单使用,并取消拖拽(滑动内容)效果,拖拽只在Scrollbar 上起作用
Unity UGUI基础 之 Scroll View/Scroll Rect 的简单使用,并取消拖拽(滑动内容)效果,拖拽只在Scrollbar 上起作用 目录 Unity UGUI基础 之 Scro ...
- Unity UGUI uv1 uv2 不起作用
protected override void OnPopulateMesh(UnityEngine.UI.VertexHelper vh) { ..... ... } 当重写Unity UGUI组件 ...
- Unity UGUI图文混排源码(三) -- 动态表情
这里是根据图文混排源码(二)进一步修改的,其他链接也不贴了,就贴一个链接就好了,第一次看这文章的同学可以先去看看其他几篇文章 Unity UGUI图文混排源码(二):http://blog.csdn. ...
- Unity UGUI 数字使用图片显示-BMFont
Unity UGUI 数字使用图片显示-BMFont BMFont 之前使用Cocos引擎的时候需要用到艺术字也就是将数字使用美术给的图片来代替显示,也就是要做一个新字体专门用来显示艺术字,当时用的是 ...
最新文章
- .tar.gz mysql 安装_mysql tar.gz 版本 linux系统的安装-Go语言中文社区
- c++经典书籍--Effective C++
- 网站服务器的解决方案有,Web网站服务器DDOS攻击的解决方案
- 使用javadoc命令生成文档
- 类操作是什么意思?jQuery的类操作教程分享
- applicationContext.xml中的使用${}是代表什么意思?
- aspen共沸精馏如何模拟_9月1011号Aspen plus:精馏精品培训!线上线下同时开展!另有惊喜活动等你参与!...
- [小技巧]你真的了解C#中的Math.Round么?
- java ab工具_(ab)使用Java 8 FunctionalInterfaces作为本地方法
- 在linux中添加字典,为 Ubuntu 的 Vim 添加英文字典
- HTML5 Canvas中绘制线段
- 计算机应用能力考试用书有哪些,全国专业技术人员计算机应用能力考试用书
- Kaggle竞赛实战系列(一):手写数字识别器(Digit Recognizer)得分99.53%、99.91%和100%
- java 数独 gui,GitHub - fagen/sudoku: 数独终局生成器和GUI
- 一个控制键盘远程控制多台视频会议摄像机(转自搜狐)
- 油画特效软件akvis artwork破解版安装及破解教程
- 中蜂几月份自然分蜂_中蜂养殖,如何给蜜蜂分蜂?时间是关键
- ubuntu 18.04 安装NVIDIA驱动 cuda/cudnn + tensorflow-gpu + pytorch
- 隐私计算加密技术基础系列(中)-RSA加密解析
- ORA-01846:周中的日无效