archor 如果分开了的话,那么对应于其锚点的集合中心点
如果设置了锚点的话最好使用anchorPosition而不是localposition
位置都是指pivot点的位置, 只不过坐标原点不同, localPosition以父物体pivot为原点, anchoredPositon以anchors点(锚点)为原点
archor 如果分开了的话,那么对应于其锚点的集合中心点
如果设置了锚点的话最好使用anchorPosition而不是localposition
位置都是指pivot点的位置, 只不过坐标原点不同, localPosition以父物体pivot为原点, anchoredPositon以anchors点(锚点)为原点
自定义锚点可以改变UI的大小miao分成四个,每个和一个Rect的顶点相对应
安全的获取UI控件的宽高
安全获取ui的宽高:
RectTransform rt;
rt.rect.width
rt.rect.height
属性面板有normal和Debug两种模式
设置ui坐标时尽量使用Anchored Position,不要用Local Position
锚点可以设置ui相对父物体的对齐方式
枢轴其实是
float int wScale = Screen.width/1920.0f;//获取到宽度放大的比例(1920是假设的实际当中的配置,不能随便写),0f是为了得到float类型的数据要把数据改成小数的形式,否则数据会出现问题
float hScale = Screen.height/1080;高度
//比较两者的大小,需要知道缩放比例变化更大的那一条边,针对变化大或变化小的边缩放,会根据具体的UI显示策略有所不同(这里简单举例,以宽的缩放比例为准)
GetComponent<CanvasScaler>().scaleFactor = wScale;//获取当前的组件(CanvasScaler),以及它的缩放参数scaleFactor等于当前的宽比例wScale(以高缩放比例为准时,用当前高的比例)
这样就能根据它的实际尺寸,来对它所有的元素进行缩放,这样可以最大程度保证它显示你修改的尺后也可以按照正常的比例进行显示。(运行需要过程,不要慌)
所以Scale Factor这个参数可以用于对于整体UI元素按同等比例放大缩小,尽量保证原本元素的显示位置。
缺点:整体UI在不同分辨率的机型上会有一些差别。但影响不大。
,四RectT的宽高操作角的锚点
RectTransform rect = transform.GetComponent<RectTransform>();
rect.rect.width;
rect.rect.height;
Screen.width//当前的屏幕宽度
Screen.Height //当前屏幕的高度
利用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用于替代。