Unity 坐標 轉換 詳解 World世界坐標 Screen屏幕坐標 View視口坐標 GUI坐標 NGUI坐標 localPosition相對父級坐標


在制作游戲中我們經常會遇到這樣一個需求

 

在人物模型的上面顯示 名字、稱號 一類的文字或者圖片 如下圖

人物模型屬於是Camera1  

UI Title信息屬於NGUI Camera2

如下圖

這時候我們就要用到坐標轉換了 確定UI Title 的世界坐標

代碼如下:

Transform charater = null;//角色Transform
Transform TitleLabel = null;//Title Label Transform

Camera camera1 = Camera.main;//照射模型Camera
Camera camera2 = UICamera.currentCamera;//NGUI Camera

Vector3 pos = camera1.WorldToScreenPoint(charater.position);//Camera1的世界坐標轉為屏幕坐標
pos.z = 0;//不需要 制為0

Vector3 pos2 = camera2.ScreenToWorldPoint(pos);//屏幕坐標轉為camera2的世界坐標

TitleLabel.position = pos2;//設置TitleLabel的世界坐標

 

 

 

 

 

 

 

 

 

想知道為什么 我們一起來詳細的了解一下Unity 坐標的知識

 

查看Unity聖典 TransfromCamera 組件

 

Transfrom 組件有如下圖2個變量

 

 

Camera 組件有如下圖6個函數

 

看完上面翻譯的信息 是不是對於 世界坐標 屏幕坐標 視口坐標 不是很理解 下面我們來詳細介紹一下這些坐標

 

WorldSpace(世界坐標):

游戲場景原點世界坐標為(0,0,0) 

獲取和設置代碼如下:

transform.position = Vector3.zero;//設置transform的世界坐標為原點(0,0,0)

Vector3 vector3 = transform.position;//獲得transform的世界坐標給vector3

 

ScreenSpace(屏幕坐標):

Screen Space是以像素來定義的 左下角為(0,0)   右上角為(Screen.width,Screen.height)  Z的位置是以相機的世界單位來衡量的。

例如場景分辨率1024x768,如果屏幕被縮小至100x100,那么點擊右上角是100x100,而不是分辨率的1024x768。

鼠標的坐標 單個手指觸摸屏幕坐標 都為屏幕坐標

Debug.Log(Input.mousePosition);//鼠標的坐標

Debug.Log(Input.GetTouch(0).position);//單個手指觸摸屏幕坐標

 

ViewPortSpace(視口坐標):

視口坐標是標准的和相對於相機的。相機的左下角為(0,0)點,右上角為(1,1)點,Z的位置是以相機的世界單位來衡量的。

 

GUI坐標

這個坐標系與屏幕坐標系相似,不同的是該坐標系以屏幕的左上角為(0,0)點,右下角為(Screen.width,Screen.height)。 

 

NGUI坐標

其實沒有什么NGUI坐標

要設置NGUI坐標 需要獲得UICamera.currentCamera來轉換坐標

 

 

了解了上面的知識 相信你利用 Camera 的那6個函數 可以隨便的轉換坐標了。

完結!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM