untiy 脚本API之RectTransformUtility

RectTransformUtility是RectTransform的辅助类,一共就几个接口很好理解。


void FlipLayoutAxes(RectTransform rect, bool keepPositioning, bool recursive),对传入的RectTransform进行翻转。keepPositioning为true时绕着自身的中心点进行旋转,每次旋转90°,为false时绕着父物体旋转,recursive为true表示带着子物体一起旋转,false表示只旋转自身。

                       

上面两组图是调用了RectTransformUtility.FlipLayoutAxes(transform as RectTransform, true, true);后的旋转前后对比图,从这我们可以看出,FlipLayoutAxes接口其实是分别做了两次旋转,一个是绕着Z轴旋转了-90°,也就是绕着中心点顺时针旋转了90°,然后X轴旋转了180°。旋转前后中心点相对于父物体的坐标位置保持不变。如果我们在RectTransform中手动设置第一张图中控件的Rotation值的话,如下图:


可以看到上图和调用接口的图2想比,除了图片的显示外其他都一样。这是因为RectTransformUtility.FlipLayoutAxes接口并不会旋转图片和文字的显示,只是改变RectTransform的参数而已。



void FlipLayoutOnAxis(RectTransform rect, int axis, bool keepPositioning, bool recursive),把传入的RectTransform水平或者垂直翻转,axis为0表示水平方向,1表示垂直方向,如下图:


三张图分别为翻转前、水平翻转、垂直翻转。



Vector2 PixelAdjustPoint(Vector2 point, Transform elementTransform, Canvas canvas),根据Transform和Canvas把point这个屏幕坐标点转换成像素正确的坐标点。

Rect PixelAdjustRect(RectTransform rectTransform, Canvas canvas),返回recttransform角点的像素精确坐标,角点的值是左下角相对于中心点的相对坐标,存储在Rect的x,y中。说实话,暂时没想到这两个接口有啥用。。。



bool ScreenPointToLocalPointInRectangle(RectTransform rect, Vector2 screenPoint, Camera cam, out Vector2 localPoint); 

把一个屏幕空间上的点,转换成rect的内部坐标,Canvas 的RenderMode在Camera和World模式下,传入的camera为UI摄像机,在OverLay,camara参数应该传入null。对Canvas RenderMode不理解可以看:点击打开链接



bool ScreenPointToWorldPointInRectangle(RectTransform rect, Vector2 screenPoint, Camera cam, out Vector3 worldPoint),把屏幕坐标转换成在rect这个实参平面内的世界坐标,这个函数可能会比较难搞懂一些,可以理解为在屏幕坐标ScrrenPoint处发条Z方向的射线,摄像与rect的交点就是返回的世界坐标worldPoint。

所以这个函数一般的用法是:RectTransformUtility.ScreenPointToWorldPointInRectangle(canvas.transform as RectTransform, Input.mousePosition, canvas.worldCamera, out vecWorldPos);,得到鼠标位置投射在Canvas平面上的世界坐标点。

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值