1. 程式人生 > >Unity3D的ScreenToWorldPoint和WorldToScreenPoint

Unity3D的ScreenToWorldPoint和WorldToScreenPoint

這兩個函式是相機Camera類的函式,主要用來作為點在螢幕座標系與世界座標系下的座標相互轉換。

官方文件中的介紹:

ScreenToWorldPoint:從螢幕空間到世界空間的變化位置。螢幕空間以畫素定義。螢幕的左下為(0,0);右上是(pixelWidth,pixelHeight),Z的位置是以世界單位衡量的到相機的距離。

WorldToScreenPoint:從世界空間到螢幕空間變換位置。螢幕空間以畫素定義,螢幕左下為(0,0),右上是(pixelWidth,pixelHeight),Z的位置是以世界單位衡量的到相機的距離。

這裡關於到螢幕座標的轉換或者由螢幕座標向世界座標系的轉換,關於螢幕座標的部分都是由一個 Vector3

描述的。針對這個返回值,前兩個分別代表在螢幕座標的x軸與y軸,螢幕左下角為起點(0,0),水平為x軸,豎直為y軸。

主要討論一下這個vector3的第三個值的意義

這個第三個值指的是在世界座標系中,指定的點到相機平面之間的距離,也就是到相機的xy平面的距離,也即物體到相機的連線在相機本體座標系的z軸上的投影。

下面用一個簡單的例子看一下:

首先把一個cube放在(0,0,0)的位置,相機置於(0,0,-10)的位置,z軸正對cube。
在這裡插入圖片描述

此時Log一下cube的positon在螢幕座標系下的位置(用WorldToScreenPoint),發現結果如下,第三個值為10。
在這裡插入圖片描述

接下來將相機繞Y軸分別旋轉45度與90度,執行同樣的操作。發現45度時第三個值為10*cos(45度),約為7.1。當旋轉90度時,第三個值為0。可以驗證。
45度:
在這裡插入圖片描述


在這裡插入圖片描述
90度:
在這裡插入圖片描述
在這裡插入圖片描述