找回密码
 立即注册
查看: 651|回复: 0

Unity坐标转换

[复制链接]
发表于 2021-4-12 15:01 | 显示全部楼层 |阅读模式
世界坐标:


场景中非子物体的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的局部坐标。
这个函数是根据父物体的坐标系来计算出当面屏幕坐标应该转换为的值,该值是相对父物体而言的局部坐标。
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-26 03:31 , Processed in 0.089628 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表