U3D屏幕坐标,世界坐标,像素坐标之间的关系
U3D屏幕坐標(biāo),世界坐標(biāo),像素坐標(biāo)之間的關(guān)系
U3D中,屏幕坐標(biāo)和世界坐標(biāo)單位一樣,二者之間是直接的一一對(duì)應(yīng)關(guān)系,不受屏幕分辨率影響。默認(rèn)情況下屏幕空間畫布的左下角坐標(biāo)是世界原點(diǎn)(0,0,0),這種情形下,世界空間的點(diǎn)(1920,1080,任何值)就對(duì)應(yīng)屏幕上的點(diǎn)(1920,1080,0)。
sprite的大小是由實(shí)際圖片的像素確定的,如512X512的圖片放到sprite上,sprite的大小是5.12X5.12。即:默認(rèn)情況下3D空間中1=100像素,這個(gè)是可以在每張圖片導(dǎo)入設(shè)置中設(shè)定的。
由此,可見,屏幕分辨率代表的是游戲窗口能看到的世界空間的范圍。比如1024X768是說(shuō)游戲窗口可以看到世界空間的1024個(gè)單位長(zhǎng),768個(gè)單位寬的范圍。
而比例分辨率是則有所不同,如4:3模式下,取系統(tǒng)桌面分辨率的高作為游戲屏幕的寬,長(zhǎng)=寬X4/3。
因此,UI的世界坐標(biāo)和3D空間中任何物體的3D坐標(biāo)性質(zhì)是一樣的。取UI的position減去它所在畫布左下角的position就得到了UI的屏幕絕對(duì)坐標(biāo)。對(duì)于屏幕空間UI,它的世界坐標(biāo)position就是屏幕空間相對(duì)于屏幕左下角(0,0,0)的坐標(biāo)了。
?分辨率改變時(shí),UI坐標(biāo)一般都會(huì)改變。除了一種情況:某UI所在層級(jí)中所有父結(jié)點(diǎn)坐標(biāo)都是相對(duì)父結(jié)點(diǎn)左下角的,該UI也必須時(shí)相對(duì)其父結(jié)點(diǎn)左下角的。原理是分辨率改變時(shí)只是在增大縮小畫布尺寸,而畫布左下角永遠(yuǎn)固定在原點(diǎn)(屏幕空間U)。
截圖中下:
?
上面說(shuō)的情況都是在畫布為 screen space overlay,canvas scaler為const pixel size 情況下。這是最簡(jiǎn)單的一種情形。
假設(shè)現(xiàn)在設(shè)置游戲分辨率為1920X1080,正交相機(jī)cam設(shè)置為orthgraphicsize = 4.5,則相機(jī)視口高為9,寬為16,備用。
canvas的三種模式:
1,screen space overlay: 這時(shí)UI坐標(biāo)的范圍是(0,0) ~ (1920,1080),因?yàn)檫@時(shí)畫布左下角在原點(diǎn)
2,screen space camera,UI相機(jī)設(shè)置為上面的cam,假設(shè)畫布左下角在原點(diǎn),這時(shí)UI坐標(biāo)范圍是(0, 0) ~ (16, 9),也就是說(shuō)它和屏幕坐標(biāo)不再是一一對(duì)應(yīng),而是縮放了。
3,world space,世界空間,這時(shí)UI就相當(dāng)于一個(gè)3D物體了,必須使用Camera.WorldToScreenPoint才能轉(zhuǎn)換到屏幕坐標(biāo)。
canvasScaler三種模式:
1,constant pixel size: 固定像素大小,這時(shí)不無(wú)論如何改變游戲窗口大小(在UNITY編輯器中拉游戲窗口邊框)Screen.width, Screen.height都是1920,1080
若是這時(shí)指定屏幕寬高比,如4:3,系統(tǒng)設(shè)備分辨率為1920X1080,則 Screen.width,Screen.heght是游戲窗口所框定的系統(tǒng)設(shè)備像素(窗口大小)
這時(shí)UI的位置和大小都是以此像素為單位的,
文檔上說(shuō)【Using the Constant Pixel Size mode, positions and sizes of UI elements are specified in pixels on the screen.】
2,scale with screen size : 這種方式自定一種畫布分辨率,UI會(huì)被先繪制到這個(gè)畫布上,然后畫布被縮放適配到游戲窗口上,此方式與比1要靈活一些,本質(zhì)上一樣。
如果畫布寬高比與屏幕寬高比例不一致,這時(shí)如何使兩者適配則由screen match mode來(lái)確定,常用的match width or height這種方式,總是取畫布的寬或高較大的一方,然后根據(jù)屏幕寬高比算出另一方
比如:畫布設(shè)定x 1920, y 1080, 屏幕分辨率取4:3模式,則實(shí)際上screen.width = 1920, screen.height = 1920 * 3/4
posted on 2017-06-24 22:29 時(shí)空觀察者9號(hào) 閱讀(...) 評(píng)論(...) 編輯 收藏
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的U3D屏幕坐标,世界坐标,像素坐标之间的关系的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【转】JPG打包压缩后比原来尺寸还大
- 下一篇: U3D 如何计算一个UI四个角的绝对坐标