行业报告 AI展会 数据标注 标注供求
数据标注数据集
主页 > 技术社区 > 移动端 > 正文

untiy中各种坐标系及其转换

本文主要总结一下unity中最常用的几种坐标系。世界坐标系、局部坐标系、屏幕坐标系、视口坐标系。以及它们之间的相互转换。

1.世界坐标系

unity是使用的左手坐标系,


顾名思义,世界坐标系就是物体在整个世界坐标系中的位置,在unity中transform.position代表的就是该物体的世界坐标,transform.localPosition就是该物体的局部坐标,局部坐标是以该节点的父节点为基准的一个位置。

2.屏幕坐标系

屏幕坐标系就是把屏幕看作一个坐标系,从左下角开始计算,也就是(0,0),而右上角则是(Screen.widht,Screen.height),所以又叫做像素坐标系。Screen.currentResolution指的是设备分辨率,比如:电脑上指的就是电脑的屏幕分辨率,手机上指的就是手机的屏幕分辨率。Screen.width,Screen.height - 指的是使用该值的窗口的宽高,比如:在Scene窗口使用指的就是Scene窗口的宽高,在Game窗口使用,即运行编辑器时使用,指的就是Game窗口的宽高,在自定义的Window使用指的就是自定义的Window的宽高。理论上在手机上这两个值是相同的,但是为了保险起见还是统一使用Screen.width,Screen.height 。(Screen.currentResolution在一些编辑器自定义窗口时可能会用到)

void Start()
    {
        Debug.Log("当前窗口的分辨率为:" + Screen.width + "X" + Screen.height);
        Debug.Log("当前屏幕的分辨率为:" + Screen.currentResolution);
    }

鼠标位置坐标Input.mousePosition就是属于屏幕坐标系,通过屏幕坐标和世界坐标互转,可得到鼠标在Unity3D中的实际交互位置,然后就可以通过逻辑做出反馈。

3.视口坐标系

该坐标系计算方式和屏幕坐标系类似,只不过把其参数标准化了,更加适用于比例计算。左下角为(0,0) 右上角为(1,1)。比如需要把屏幕划分成等份的时候,就可以统一转换为视口坐标系再来进行操作。


这里不管是视口坐标还是屏幕坐标,其z值还是有的,是表示深度的。

3.GUI坐标系

该坐标是从左上角开始计算的,左上角(0,0),右下角为(Screen.width,Screen.height);

坐标系的相互转换

1.世界坐标和屏幕坐标的相互转换

屏幕坐标转世界坐标
Camera.ScreenToWorldPoint(Vector3 Pos);

世界坐标转屏幕坐标
Camera.WorldToScreenPoint(Vector3 Pos);

关于应用:
这些转换一般应用于想要通过鼠标来操作世界物体,比如物体跟随鼠标移动
所以我们要通过巧妙的方式弥补这个Bug,代码如下。(这个写法是网上查到的,我找不到出处了)

    void Update()
    {
        // 首先将要操纵的物体的世界坐标转为屏幕坐标
        Vector3 screenPos = Camera.main.WorldToScreenPoint(transform.position);
        // 然后获取鼠标的屏幕坐标
        Vector3 mousePos = Input.mousePosition;
        // 然后将已经转换好的物体的屏幕坐标的Z值赋给缺失z值的鼠标屏幕坐标
        mousePos.z = screenPos.z;
        // 然后将已经完整的鼠标屏幕坐标转成世界坐标
        Vector3 worldPos = Camera.main.ScreenToWorldPoint(mousePos);
        // 最后每帧修改物体世界坐标位置
        transform.position = worldPos;
    }

2.世界坐标和视口坐标的相互转换

世界坐标转视口坐标
Camera.WorldToViewportPoint(Vector3 Pos)

视口坐标转世界坐标
Camera.ViewportToWorldPoint(Vector3 Pos);

3.屏幕坐标和视口坐标的相互转换

屏幕坐标转视口坐标
Camera.ScreenToViewportPoint(Vector3 Pos)

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


 

微信公众号

声明:本站部分作品是由网友自主投稿和发布、编辑整理上传,对此类作品本站仅提供交流平台,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,不为其版权负责。如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时修改或删除。

相关文章:

相关推荐:

网友评论:

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
SEM推广服务

Copyright©2005-2026 Sykv.com 可思数据 版权所有    京ICP备14056871号

关于我们   免责声明   广告合作   版权声明   联系我们   原创投稿   网站地图  

可思数据 数据标注行业联盟

扫码入群
扫码关注

微信公众号

返回顶部