Unity坐标转换

世界坐标:

场景中非子物体的transform组件的坐标。Unity中的通过transform.position获取到的坐标即为世界坐标,注意:Inspector上点击子物体显示的transform上的坐标值是局部坐标,通过transform.localposition获取。

屏幕坐标:

屏幕坐标即当前整个游戏画面分辨率为主创建的坐标系,画面左下角为原点(0,0),宽高根据分辨率而定,如分辨率为1920X1080,则宽Screen.width = 1920,Screen.height = 1080.

视口坐标:

将屏幕坐标normalized化,x值 = 1/Screen.width,y值 = 1/Screen.height。,即原点变不变依然为(0,0),宽高则为(1,1)。

UI坐标:

以UI上的RectTransform的width和height为宽高,根据锚点不同,原点也不一样。

转换:

1.屏幕转世界坐标
Vector3 Camera.main.ScreenToWorldPoint(newVector3(screenPos.x,screenPos.y,zInfo));

2.世界转屏幕坐标
Vector3 Camera.main.WorldToScreenPoint(newVector3(worldPos.x,worldPos.y,worldPos.z));

3.世界转视口坐标
Vector3 Camera.main.WorldToViewportPoint();

4.视口转世界坐标
Vector3 Camera.main.ViewportToWorldPoint(newVector3(viewPortPos.x,viewPortPos.y,zInfo));

5.视口转屏幕坐标
Vector3 Camera.main.ViewportToScreenPoint();

6.屏幕转视口坐标
Vector3 Camera.main.ScreenToViewportPoint();

7.屏幕转UI坐标:这个比较特殊,如果UI宽高和屏幕宽高一样,那么可以不用转换,直接通过屏幕坐标根据锚点赋值即可。其他情况下:
RectTransformUtility.ScreenPointToLocalPointInRectangle
(RectTransform rect,
Vector2 screenPoint,
Camera cam,
outVector2 localPoint);

rect表示该UI的父物体的组件,
screenPoint表示屏幕坐标,
cam表示当前使用的相机(如果Canvas是Screen Space-overlay模式,cam参数应为null),
localPoint则是输出的UI的局部坐标。
这个函数是根据父物体的坐标系来计算出当面屏幕坐标应该转换为的值,该值是相对父物体而言的局部坐标。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 夜莺2517阅读 127,826评论 1 9
  • 版本:ios 1.2.1 亮点: 1.app角标可以实时更新天气温度或选择空气质量,建议处女座就不要选了,不然老想...
    我就是沉沉阅读 11,861评论 1 6
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 12,749评论 28 53
  • 兔子虽然是枚小硕 但学校的硕士四人寝不够 就被分到了博士楼里 两人一间 在学校的最西边 靠山 兔子的室友身体不好 ...
    待业的兔子阅读 7,530评论 2 9

友情链接更多精彩内容