日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

屏幕坐标系和视口坐标系

發布時間:2025/4/17 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 屏幕坐标系和视口坐标系 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一.屏幕坐標系
1.屏幕坐標系: 手機屏幕或者電腦屏幕的一個坐標系。
2.屏幕坐標是以像素來定義的, 屏幕左下角為原點(0,0), 右上角為(Screen.width,Screen.height), width是屏幕的寬度, height是屏幕的高度, Z值是攝像機世界坐標取反,并且以相機的世界單位來衡量的。
3.屏幕坐標和相機之間滿足: Screen.width = Camera.main.pixelWidth和Screen.height = Camera.main.pixelHeight這兩個條件。
4.鼠標的位置坐標屬于屏幕坐標。通過Input.mousePosition獲取鼠標的屏幕坐標。
二.創建工程
1.創建一個游戲工程, 命名為ScreenViewPort

2.在Project視圖中創建3個文件夾, Scene文件夾、Resources文件夾和Script文件夾

3.將當前場景保存為GameScene

4.創建ScreenPosition游戲腳本


5.在Hierarchy視圖中創建一個空的GameObject, 命名為GameManager,并把ScreenPosition綁定在該對象上

6.更改屏幕分辨率為480 * 800

7.編寫代碼

using UnityEngine;public class ScreenPosition : MonoBehaviour {void Update () {if(Input.GetMouseButtonDown(0)){Debug.Log ("屏幕坐標:" + Input.mousePosition);}} }

8.運行點擊屏幕打印

屏幕坐標:(9.0, 33.0, 0.0)

屏幕坐標:(458.0, 22.0, 0.0)

屏幕坐標:(228.0, 410.0, 0.0)

屏幕坐標:(458.0, 795.0, 0.0)

三.視口坐標系

1.攝像機的前面有一個長方形的小框子, 那個即為視口。


2.視口坐標是標準化后的屏幕坐標。視口坐標是以0到1間的數字來表示的, 它的范圍是以左下角為(0,0), 右上角為(1,1)定義的這樣一個矩形。視口坐標是一個3D坐標, Z軸是以相機的世界單位來衡量的。通過對比可以發現視口坐標和屏幕坐標特別的相似。

3.攝像機視口比例:public float aspect{get;set;},此屬性用于獲取或設置Camera視口的寬高比例值。

4.void ResetAspect();恢復長寬比為屏幕的長寬比。

5.代碼

using UnityEngine;public class CameraAspect : MonoBehaviour {void Start () {Debug.Log ("默認寬高比例:" + Camera.main.aspect);}void OnGUI () {if(GUILayout.Button("攝像機寬高比例為1")){Camera.main.ResetAspect ();Camera.main.aspect = 1;}if(GUILayout.Button("攝像機寬高比例為2")){Camera.main.ResetAspect ();Camera.main.aspect = 2;}} }

四.屏幕坐標和視口坐標的轉換

1.從視口空間到屏幕空間的變換位置: Vector3 ViewportToScreenPoint(Vector3 position);

2.從屏幕空間到視窗空間的變換位置: Vector3 ScreenToViewportPoint(Vector3 position);

3.代碼

using UnityEngine;public class ScreenViewPortPosition : MonoBehaviour {void Start(){Debug.Log ("攝像機視口坐標轉換成屏幕坐標[(0,0,0),"+Camera.main.ViewportToScreenPoint(new Vector3(0,0,0))+"]");Debug.Log ("攝像機視口坐標轉換成屏幕坐標[(0.5,0,0),"+Camera.main.ViewportToScreenPoint(new Vector3(0.5f,0,0))+"]");Debug.Log ("攝像機視口坐標轉換成屏幕坐標[(0,0.5,0),"+Camera.main.ViewportToScreenPoint(new Vector3(0,0.5f,0))+"]");Debug.Log ("攝像機視口坐標轉換成屏幕坐標[(0.5,0.5,0),"+Camera.main.ViewportToScreenPoint(new Vector3(0.5f,0.5f,0))+"]");Debug.Log ("攝像機視口坐標轉換成屏幕坐標[(1,0,0),"+Camera.main.ViewportToScreenPoint(new Vector3(1,0,0))+"]");Debug.Log ("攝像機視口坐標轉換成屏幕坐標[(0,1,0),"+Camera.main.ViewportToScreenPoint(new Vector3(0,1,0))+"]");Debug.Log ("攝像機視口坐標轉換成屏幕坐標[(1,1,0),"+Camera.main.ViewportToScreenPoint(new Vector3(1,1,0))+"]");}void Update () {if(Input.GetMouseButtonDown(0)){Debug.Log ("攝像機屏幕坐標轉換成視口坐標:["+Input.mousePosition+","+Camera.main.ScreenToViewportPoint(Input.mousePosition)+"]");}} }

總結

以上是生活随笔為你收集整理的屏幕坐标系和视口坐标系的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。