untiy中各种坐标系及其转换

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

1.世界坐标系

unity是使用的左手坐标系,

 

image.png

 

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

 

image.png

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)。比如需要把屏幕划分成等份的时候,就可以统一转换为视口坐标系再来进行操作。

 

image.png

 

这里不管是视口坐标还是屏幕坐标,其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);

参考:https://blog.csdn.net/weixin_43147385/article/details/124230124

未经允许不得转载:窗外天空 » untiy中各种坐标系及其转换

赞 (0)

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址