在学习Unity的过程中,我原先一直只关注 WorldPositon 、 LocalPosition。即世界坐标和本地坐标。一个是世界的绝对坐标,一个是相对父对象的相对坐标。
但是现在我也要开始注意第三种坐标,叫做屏幕坐标。屏幕坐标就是在屏幕上表现的坐标。如果是一个1920*1080的屏幕,那么他的左下角就是(0,0) 右上角就是(1920,1080)。在代码中,Input.MousePostion返回的就是屏幕坐标。
要注意的是,这个屏幕坐标是和相机有关的。你的相机有一个矩形的窗口,这个窗口中的物体就会被相机捕捉然后渲染到游戏窗口。如果是多个相机,那么屏幕坐标之间的转换就会变得比较复杂,我还没搞懂。目前我做的实验全部都是使用一个游戏主相机。
- UI中RectTransform
首先要知道,RectTransform是UI系统对Unity传统的Transform组件进行的一个拓展,所以原有的Transform的一些属性方法在RectTransform中也是可以访问到的。
RectTransform的position有如下三个
anchoredPosition :这个是自己的recttransform中设置的anchor与pivot的相对位置
localPosition:这个在recttransform中就等于anchoredPosition 。 这两种坐标要学会使用。
position:这个就是recttransform的屏幕坐标。它的好处就是可以无视UI窗口的父子关系所产生的相对坐标,这个是一个相对于屏幕的绝对坐标。所以如果想要简单实现一些UI位置变化,那么这个坐标十分好用。通常是将游戏中的世界坐标转换成一个屏幕坐标,再把 这个屏幕坐标赋值给 UI的position。如RectTransformUtility.WorldPositionToScreenPositonInRectTransform。这个就是RectTransform自带的工具类,我们可以用里面的静态方法简单的实现一些坐标的转换。
关于UI坐标与游戏坐标的转换,还有