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