Unity 坐标 转换 详解 World世界坐标 Screen屏幕坐标 View视口坐标 GUI坐标 NGUI坐标 localPosition相对父级坐标
在制作游戏中我们经常会遇到这样一个需求:
在人物模型的上面显示 名字、称号 一类的文字或者图片 如下图
人物模型属于是Camera1
UI Title信息属于NGUI Camera2
如下图
这时候我们就要用到坐标转换了 确定UI Title 的世界坐标
代码如下:
Transform charater = null;//角色Transform Transform TitleLabel = null;//Title Label Transform Camera camera1 = Camera.main;//照射模型Camera Camera camera2 = UICamera.currentCamera;//NGUI Camera Vector3 pos = camera1.WorldToScreenPoint(charater.position);//Camera1的世界坐标转为屏幕坐标 pos.z = 0;//不需要 制为0 Vector3 pos2 = camera2.ScreenToWorldPoint(pos);//屏幕坐标转为camera2的世界坐标 TitleLabel.position = pos2;//设置TitleLabel的世界坐标
想知道为什么 我们一起来详细的了解一下Unity 坐标的知识
查看Unity圣典 Transfrom 和 Camera 组件
Transfrom 组件有如下图2个变量
Camera 组件有如下图6个函数
看完上面翻译的信息 是不是对于 世界坐标 屏幕坐标 视口坐标 不是很理解 下面我们来详细介绍一下这些坐标
WorldSpace(世界坐标):
游戏场景原点世界坐标为(0,0,0)
获取和设置代码如下:
transform.position = Vector3.zero;//设置transform的世界坐标为原点(0,0,0) Vector3 vector3 = transform.position;//获得transform的世界坐标给vector3
ScreenSpace(屏幕坐标):
Screen Space是以像素来定义的 左下角为(0,0) 右上角为(Screen.width,Screen.height) Z的位置是以相机的世界单位来衡量的。
例如场景分辨率1024x768,如果屏幕被缩小至100x100,那么点击右上角是100x100,而不是分辨率的1024x768。
鼠标的坐标 单个手指触摸屏幕坐标 都为屏幕坐标
Debug.Log(Input.mousePosition);//鼠标的坐标 Debug.Log(Input.GetTouch(0).position);//单个手指触摸屏幕坐标
ViewPortSpace(视口坐标):
视口坐标是标准的和相对于相机的。相机的左下角为(0,0)点,右上角为(1,1)点,Z的位置是以相机的世界单位来衡量的。
GUI坐标
这个坐标系与屏幕坐标系相似,不同的是该坐标系以屏幕的左上角为(0,0)点,右下角为(Screen.width,Screen.height)。
NGUI坐标
其实没有什么NGUI坐标
要设置NGUI坐标 需要获得UICamera.currentCamera来转换坐标
了解了上面的知识 相信你利用 Camera 的那6个函数 可以随便的转换坐标了。
完结!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)