前言:
最近項目中用到了很多自身坐標與世界坐標的轉換坯约,寫代碼的時候發(fā)現(xiàn)自己對于這部分的知識還不夠清晰雪隧,故記下此文。
不同的坐標系
一普办、世界坐標
- 以世界空間下的原點的坐標系
- 通過transform.position調用
- 如果沒有父物體奕筐,檢視面板顯示的就是世界坐標
二舱痘、自身坐標(又叫本地坐標)
- 以父物體空間為原點的坐標系
- 通過transform.localposition調用
- 如果有父物體变骡,檢視面板顯示的就是自身坐標
三、屏幕坐標
- 以屏幕左下角為原點的二維坐標系.以屏幕的左下角為(0芭逝,0)塌碌,右上角為(Screen.width,Screen.height)
- 坐標的右上角的值根據(jù)游戲視圖的屏幕分辨率來決定
- 獲取的鼠標坐標就是屏幕坐標(Input.mousePosition)
四旬盯、視口坐標
- 以屏幕左下角為原點的二維坐標系台妆,左下角是(0,0),右上角是(1,1),是一個歸一化的值
- Z軸是世界坐標的Z軸
- 多用來過渡轉換坐標胖翰,如世界坐標轉屏幕坐標:先從世界坐標轉視口坐標接剩,再從視口坐標轉屏幕坐標
五、GUI坐標
- 以屏幕左上角為原點的二維坐標系萨咳,左上角是(0,0)懊缺,右下角是(Screen.width,Screen.height)
六培他、桌面坐標
- 以左上角為原點的二維坐標系鹃两,左上角是(0,0),右下角是(桌面分辨率的寬,桌面分辨率的高)
- 用SetCursorPos設置鼠標坐標舀凛,用GetCursorPos得到鼠標坐標俊扳。
不同的坐標系之間的轉換
一、自身轉世界
- 世界坐標 = Transform對象.TransformPoint(自身坐標)
二腾降、世界轉自身
- 世界坐標通過把父物體設置為想要成為的自身坐標的父物體拣度,得到的就是這個世界坐標轉化后的自身坐標
三碎绎、世界轉屏幕
- 通過調用Camera.main.WorldToScreenPoint()
- Unity底層是從世界轉視口螃壤,再從視口轉屏幕
四、世界轉視口
- 通過調用Camera.main.WorldToViewPort()
五筋帖、視口轉屏幕
- 通過調用Camera.main.ViewportToScreenPoint()
- 視口坐標乘以屏幕分辨率(Screen.width和Screen.hight)也可從視口坐標轉為屏幕坐標
六奸晴、屏幕轉視口
- 通過調用Camera.main.ScreenToViewportPoint()
七、視口轉世界
- 通過調用Camera.main.ViewportToWorldPoint()