unity 坐标系转换_Unity的几种坐标系及相互转换
介紹
1.WorldSpace(世界坐標(biāo)系)
當(dāng)我們向場景中添加物體時,他們都是以世界坐標(biāo)系的方式的方式顯示在場景中的
通過transform.position可以得到它在世界中的坐標(biāo)位置,transform.position(Vector3)可以設(shè)置它在世界中的位置(c#不支持單獨設(shè)置x y z);
2.ScreenSpace(屏幕坐標(biāo)系)
以像素為單位,左下角是(0,0),右上角為(screen.width, screen.height),Z的位置是以相機的世界單位來衡量//及物體離相機遠近
注:鼠標(biāo)位置坐標(biāo)屬于屏幕坐標(biāo),Input.mousePosition可以獲得鼠標(biāo)坐標(biāo),手指觸摸屏也為屏幕坐標(biāo),Input.GetTouch(0).position可以獲得單個手指的手機屏幕坐標(biāo)
說點題外話
unity中Input.GetMouseButtonDown(0)代表按下鼠標(biāo)左鍵,Input.GetMouseButtonDown(1)代表鼠標(biāo)右鍵Input.GetMouseButtonDown(2)代表滾輪中間。
3.ViewPort(視口坐標(biāo))
左下角為(0, 0),右上角為(1, 1)在一些畫中畫效果中常用到,比如主視口為FPS,然后右下角有一個小窗口為第三人稱視圖。
4.繪制GUI界面的坐標(biāo)系(自從有了新版UI之后這個也很少用到)
這個坐標(biāo)系與屏幕坐標(biāo)系類似,不同的是左上角為(0,0),右下角為(screen.width, screen.height)這樣繪制起來更方便。
5.桌面坐標(biāo)系(系統(tǒng)坐標(biāo)系)
這個坐標(biāo)系與屏幕坐標(biāo)系類似,不同的是該坐標(biāo)系以桌面的左上角為(0,0),桌面右下角為桌面分辨率的寬和桌面分辨率的高
用SetCursorPos設(shè)置鼠標(biāo)坐標(biāo),用GetCursorPos得到鼠標(biāo)坐標(biāo)。
C#中:
命名空間 using System.Runtime.InteropServices;
導(dǎo)入庫 [DllImport("user32.dll")]
函數(shù)原型 public static extern int SetCursorPos(int x, int y);
public static extern bool GetCursorPos(ref int x, ref int y);
******************************************************
轉(zhuǎn)換
1.物體的世界坐標(biāo)到屏幕坐標(biāo)的轉(zhuǎn)換
C#
1
Camera.main.WorldToScreenPoint(cb.transform.position);//cb代表場景中的一個方塊物體,得到的vector3中的z為相機離cube物體的遠近
2.屏幕坐標(biāo)轉(zhuǎn)世界坐標(biāo)
C#
1
Vector3world=Camera.main.ScreenToWorldPoint(Input.mousePosition);//及鼠標(biāo)單擊位置距世界中心(0,0,0)點的距離
3.屏幕坐標(biāo)轉(zhuǎn)視口坐標(biāo)
C#
1
Vector3viewCoor=Camera.main.ScreenToViewportPoint(Input.mousePosition);//底層原理無非就是Input.mousePosition.x/Screen.width,Input.mousePosition.y/Screen.Height;
4.視口坐標(biāo)轉(zhuǎn)屏幕坐標(biāo)
C#
1
Vector3screen=Camera.main.ViewportToScreenPoint(newVector3(0.2f,0.3f,0));//注意視口左下角為(0,0),右上角為(1,1);
5.視口坐標(biāo)到世界坐標(biāo)
C#
1
Vector3word=Camera.main.ViewportToWorldPoint(newVector3(0.2f,0.3f,0));//注意當(dāng)只改變一個z值時轉(zhuǎn)化出的世界坐標(biāo)的x,y也會發(fā)生相應(yīng)的變化
6.屏幕坐標(biāo)轉(zhuǎn)射線
C#
1
2
3
4
5
6
7
8
9
if(Input.GetMouseButtonDown(1))
{
Rayray=Camera.main.ScreenPointToRay(Input.mousePosition);// 從鼠標(biāo)位置發(fā)送射線
RaycastHithit;
if(Physics.Raycast(ray,outhit,100,1<
{
Debug.Log(hit.collider.name);
}
}
6.視口坐標(biāo)轉(zhuǎn)射線
C#
1
2
3
4
5
6
7
8
9
if(Input.GetMouseButtonDown(1))
{
Rayray=Camera.main.ViewportPointToRay(newVector3(0.5f,0.5f,0));// 從屏幕中央發(fā)送射線
RaycastHithit;
if(Physics.Raycast(ray,outhit,100,1<
{
Debug.Log(hit.collider.name);
}
}
最后編輯:2017-12-05作者:網(wǎng)蟲蟲
分享是一種快樂;
分享是一種美德;
分享是一種幸福!
總結(jié)
以上是生活随笔為你收集整理的unity 坐标系转换_Unity的几种坐标系及相互转换的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python检验阿姆斯特朗数_pytho
- 下一篇: 全系换装2.0T+48V轻混 新款凯迪拉