利用rectransform中的rect的weigh和high方法来获取控件的尺寸
利用轴心点可以控制一边不动
锚点位置的调整是相对于父物体的
锚点打开和分开可以得到不同的功能
利用rectransform中的rect的weigh和high方法来获取控件的尺寸
利用轴心点可以控制一边不动
锚点位置的调整是相对于父物体的
锚点打开和分开可以得到不同的功能
这里有坑,轴心点不是(0,0)的位置,轴心点是图片的位置。
LocalPosition: 轴心点相对于rectPanel几何中心点的位置
AnchorPosition:轴心点相对于锚点几何中心点的位置
Unity UGUI点击事件Bug:
1、引发条件:如果子类上的脚本只实现IPointerClickHandel的click事件时,当父类物体继承自IPointerClickHandel、IPointerDownHandel并且实现了PointerClick、PointerDown方法,那么子物体的click事件会被吞掉,且父物体的click和down事件都不会被执行。
PointerEventData的 clickTime:记录的是项目运行时的点击时间点。
OnPointerDown:获取的是上一次点击时的时间点;
OnPointerClick:获取的是当前点击的时间点;
注意⚠️:目标物体必须添加有Selectable这个组件,才能使用诸如:ISelectHandle、IDeselectHandle、IUpdateSelectHandle的API;
⚠️注意:
1、IDropHandler 的OnDrop的调用在 IDrapHandle的OnDrap之后,在OnEndDrap之前;
2、使用IDrapHandler、IDropHandler拖动物体时,被拖动物体的UI层级需要在IDrapHandle的OnDrap方法里面及时更新UI层级;
3、所有的拖拽事件,都必须依靠于IDrapHandler的OnDrap这个API才能起作用;
UGUI实现事件的3种形式:
1、继承对应的 API 类,实现对应的方法;(推荐,直接使用代码处理);
2、在GUI中添加对应功能的事件组件、Event Trigger,加上对应的实现脚本;(不推荐使用,使用不方便。需要结合代码来控制);
3、结合GUI上添加的组件 + 代码添加事件;
注意事项⚠️:
1、Vertical/Horizontal Layout Group ->Child Force Expend(width、Height)优先级高于 Layout Element(Script)的子项设置;
2、Layout Element(Script)-> Min Width/Height为预留空间,优先级高于Vertical/Horizontal Layout Group ->Child Force Expend(width、Height)。即即使设置了Vertical/Horizontal Layout Group 勾选了Child Force Expend(width、Height),其子项Layout Element(Script)-> Min Width/Heigh开启的情况下,默认会为Layout Element(Script)-> Min Width/Heigh的值预留空间。然后把,剩余的UI空间进行平分。
Inertia:滚动惯性
1、UI的动画,尽可能使用DoTween去写,不要使用Animation(过于死板);
1、尽可能避免使用系统组件Mask,会增加draw call、不利于UI部分的层级合并、影响性能。(含有Mask的UI,Mask下的UI会单独draw call)
2、Rect Mask(2D)容易出bug问题,不会增加draw call、不影响层级合并。
3、自己写mask用于替代。
Sprite Mode:
Single:单个,常用九宫格模式切图模式
Multiple:图集,可自定义切割图集,图集里面也可以进行九宫格切割;
Image(Script)
Material:材质
Raycast Target:是否能响应图形射线(勾选才能响应事件 )
决定UI渲染层级的4种因素:
后渲染的图层会覆盖在先渲染的图层之上
1、Camera 的 depth层级,渲染从低位到高位数;
2、Canvas-> Sorting Layer:可以设置自定义层级;
3、当Sorting Layer设置为同一layer层时,order in layer项决定渲染顺序(由小到大进行渲染);
4、工程目录层级渲染:无设定的情况下,则按照工程的目录层级默认进行渲染;
批量管理Canvas下的UI
Canvas Group
Alpha通道:透明度调整;
InteractTable:点击响应(勾选则不响应);
Blocks Graphics:是否接受图形检测;(勾选则不接受检测);
Ignore Parent Groups:当前的Group是否受父级的group的管理;(勾选则不受父级管理);
Graphic Raycaster属性:
Ignore Reversed Graphics:背对着canvas的图形,射线检测是否要忽略此图形;案例:当图形Y轴进行旋转180度后,此时是背对着canvas,这是如果是勾选,就会忽略不检测此图形;
Blocking Objects: 阻碍射线的 Object 类型,注意:当前点击的物体类型,是通过当前物体的碰撞体(挂载的物体类型)来判定的。 需要配合BlockingMask勾选的 Layer 将会阻碍射线来使用。
Blocking Mask: 勾选的 Layer 将会阻碍射线;
只有当前的UI,添加了Graphic Raycaster组件,才能响应事件。
用于检测投向Canvas的射线。
Graphic Raycaster既可以配置忽略背面朝上的图形,也可以被UI元素前的2D和3D对象遮挡。
Ignore Reversed Graphics:忽略颠倒的图形的射线检测,即旋转180°后的图片不会与射线发生交互(检测)
Blocked Objects:会阻挡图形射线的对象类型(2D或(/和)3D对象,需要有collider组件)。
Blocked Mask:会阻挡图形射线的Layer。
1、Scale Factor:在当前画布里所有UI元素的缩放比例(整体缩放)
2、Reference Pixel Per Unit(像素参考单位):当前每个uint(单元)对应的像素数。
3、Pixel Per Unit:每个unit单位含有多少像素数;
1、Canvas的属性Render Model:
Screen Space - Overlay:此模式下,当前的UI将会在其他所有层之上;跟Camera没有直接的关系,此模式下绘制的UI将直接显示到显示界面的最上层;
Screen Space - Camera:当前画布需要跟一个具体的Camera关联,canvas的位置由相机决定
World:将当前的画布作为一个3D模型空间的面片显示
2、Pixel Prefect:是否为了正确显示图片的像素,而关闭抗锯齿。 开启:则表示图片抗锯齿处理无效;
3、sort order:用于UI显示层级排序;
1、蓝图模式:作用于当前UI的旋转、缩放比例(rotation、scale)控制UI的实际响应区域;
2、原始编辑模式:作用于当前UI的锚点、轴心点;