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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

unity 坐标系转换_Unity的几种坐标系及相互转换

發布時間:2023/12/4 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的几种坐标系及相互转换的全部內容,希望文章能夠幫你解決所遇到的問題。

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