Unity中2D游戏多分辨率屏幕适配方案
一:什么是像素?
像素是由很多個小方格組成,每一個小方格上都存儲了位置信息和色彩信息。像素是圖像的最小單位
圖像分為兩類:位圖和矢量圖
——位圖(點陣圖):由多個像素組成,當放大時被分為多個色塊,而且放大的位圖屬于失真狀態。平時拍照,掃描的圖片等都屬于位圖
——矢量圖:通過數學公式計算獲得的圖像,無論怎樣放大都不會失真,但是難以呈現色彩層次豐富的逼真圖像
二:圖像分辨率與屏幕分辨率
——圖像分辨率:每英寸圖片內有多少個像素點,單位為PPI(Pixels Per Inch)—像素每英寸。例如72ppi代表每英寸包含72個像素點
——屏幕分辨率:屏幕每行的像素點數*屏幕每列的像素點數。例如1280*720代表橫向1280像素縱向720像素,其總數為1280*720=921600個像素
三:像素的作用
——為什么圖像(位圖)放大后會變得模糊?
例如這是一張135*145的圖,左邊為正常情況下的全圖,右邊為放大之后的局部圖。明顯的看出放大之后圖像失真了變得模糊了。那為什么圖像會變得模糊呢?
這是因為圖像放大后圖像分辨率變小了,也就是每英寸顯示的像素點數變少,所以變得模糊了。正常情況下單位面積內可以顯示所有的像素點數比如10000個,而放大后單位面積內只能顯示1000個像素點數
所以不難理解單位面積內的像素點越多,圖像就會越清晰越逼真
——為什么分辨率越高的顯示器越清晰?
例如兩個顯示器,A的分辨率是640*480,B的分辨率是1600*1200,那么A屏幕上能夠顯示的像素為640*480個,明顯少于B屏幕能夠顯示的像素,這也就是為什么分辨率越高的屏幕越清晰
假設有兩個不同尺寸大小的屏幕A和B,A的尺寸比B大,但是他們的分辨率相同,那么他們同樣清晰,不存在A比B清晰
四:Unity中的單位與圖片像素的關系
在Inspector面板的圖像設置中有一個Pixels Per Unit參數。它代表Unity的一個單位長度包含本圖片多少個像素
在Unity中創建的Cube等基本圖形默認就是一個Unity單位長度,一個單位長度在unity世界坐標中代表1米
例如默認值為100,則代表一個Unity單位包含本圖片中100個像素
例如還是這張小烏龜的圖片,它是135像素*145像素。
那么它占了多少個Unity單位呢?
當Pixels Per Unit為100時則圖片在高度上占了145/100=1.45個Unity單位高,左圖所示。
當Pixels Per Unit為50時則圖片在高度上占了145/50=2.9個Unity單位高,右圖所示。
將圖片放到場景中查看,驗證所得的結論
五:Camera在正交模式下的Size與像素和Unity之間的關系
現在已經明白了Unity中單位與像素之間的關系,其實它與相機的視口也存在一定的關系
結論是:相機高度占的單位長度=相機的size * 2
例如當前Camera的size為3,那么屏幕高度應該占了2*3=6個Unity單位,左圖所示
例如當前Camera的size為2,那么屏幕高度應該占了2*2=4個Unity單位,右圖所示
在場景中查看,驗證結論
?
既然屏幕高度的單位長度/2是相機的size大小,那么屏幕寬度占的單位長度與相機size大小有什么關系呢?
例如當前Camera的size為1,左圖所示,可以看出是3個多單位長度。
例如當前Camera的size為0.5,右圖所示,可以看出是1個多單位長度。
很明顯屏幕寬度占的單位長度與相機size大小沒有關系
既然屏幕寬度占的單位長度與相機size大小沒有關系,那么屏幕寬度與什么有關系呢?
新建一個cube,因為cube的長和寬都是1個單位長度。
調整Camera的size為0.5,則在屏幕高度上應該是0.5*2=1個單位長度,也就是正好可以放下1個cube。
例如屏幕的分辨率為5:4,如左圖所示。
例如屏幕的分辨率為16:9,如右圖所示。
不難發現,無論怎樣調整分辨率,相機顯示的單位高度都不會改變,但是仔細觀察兩種不同分辨率下的Game窗口,天空盒占的范圍不一樣。
所以得出結論:相機高度占的單位長度只由Camera的size決定,而相機寬度占的單位長度是由于分辨率不同再通過一個比例計算出來的:
又因為相機高度占的單位長度=相機的size*2,所以總結出來一個公式
六:為什么場景視圖的Scale不是1呢
還有一個問題就是為什么在Game視圖中的Scale不為1。
改變不同的分辨率后測試后發現不同分辨率的Game視圖不但Scale不為1而且還是不同的。繼續測試,當分辨率為2304*1440時(我的屏幕最大分辨率為這個),當Game窗口小時,Scale為0.256,當Game窗口大時,Scale為0.586。
結論:因為我們的屏幕太小了,無法顯示這個分辨率的畫面所以只能將相機畫面等比例縮放,并不影響游戲。
比如我這臺電腦的分辨率為2304*1440,而我游戲場景設置的分辨率為2560*1440,那么無論場景視圖放到多大Scale都不可能為1。而如果游戲場景設置的分辨率比較小時在你的Game窗口就有可能會顯示不縮放的Scale比例。
七:2D游戲多分辨率屏幕適配方案(只適用于Orthographic的相機投射模式)
對于UI元素,UGUI有可視化的自適應設置功能,但對于2D游戲中的精靈圖片呢?
首先明確實際游戲內容和有效游戲內容兩個概率,實際游戲內容可以通過調整Camera的Size來控制,有效游戲內容指游戲中一定需要完整顯示在屏幕上的內容。我們開發時會選擇一個固定的分辨率進行開發,這個分辨率下的游戲內容就是有效游戲內容
例如750*1334的分辨率下進行開發,Camera的Size為5,計算出游戲有效內容寬度為5*2*750/1334=5.6,之后通過公式:相機的orthographicSize=游戲的有效內容寬度/寬高比/2
總結
以上是生活随笔為你收集整理的Unity中2D游戏多分辨率屏幕适配方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 堆糖瀑布流完整解决方案(jQuery)
- 下一篇: 同人女,我想对你说——黄金圣斗士对同人女