Pixels Per Unit在圖片導入到Unity的時候,將圖片格式設置為Sprite的情況下會出現,其意思是精靈中的多少像素對應世界中的一個單位,默認是100
1. 對于在世界坐標中
在世界坐標中,一般對于Sprite的應用是Sprite Renderer組件
使用一張100 * 100分辨率的圖片
將相機設置為正交相機,同時將Size設置為0.5,因為orthographicSize表示相機垂直視體大小的一半,設置為0.5,就代表此時相機的垂直視體大小為一個單位
發現此時圖片的長度剛好撐滿相機的垂直視體長度,應該是因為此時世界中的主體是Sprite Renderer,而其Scale是1,所以剛好對應一個世界單位,此時,orthographicSize= 0.5,正交相機的高度就是一個世界單位
2. 對于UI系統來說,當Canvas是Overlay模式時
當Canvas是Overlay模式時
在Canvas Scaler中,有一個referencePixelsPerUnit屬性
其意思為“如果精靈具有此“每單位像素(Pixels Per Unit)”設置,則精靈中的一個像素將覆蓋用戶界面中的一個單位”。默認是100
對于Image來說,它也有一個Pixels Per Unit屬性
其最終計算結果是Sprite的 PPU / Canvas的referencePixelsPerUnit
其中,SetNativeSize方法有用到這個Imgae的Pixels Per Unit屬性
這個方法的意思是調整圖像大小以使其達到像素完美,這意味著將圖像的 RectTransform.sizeDelta 設置為與精靈的尺寸相等。
在這個方法中,通過Sprite的寬高和Image的PPU比值,來得到當前圖片的sizeDelta,且將anchorMin和anchorMax聚攏在一點,當錨點聚在一起時,此時的sizeDelta就是圖片的大小,而pixelsPerUnit又等于spritePixelsPerUnit / m_CachedReferencePixelsPerUnit,所以此時
圖片的尺寸 = Sprite寬高 / (Sprite 的PPU / Canvas的referencePixelsPerUnit)
- 當Sprite的PPU = 100, Canvas的RPPU = 100,Sprite的尺寸是100 * 100時
圖片尺寸 = (100,100)/ (100 / 100)= (100,100)
點擊SetNativeSize,查看Image的寬高
符合計算結果
- 當Sprite的PPU = 50,Canvas的RPPU = 100,Sprite的尺寸是100 * 100時
點擊一下SetNativeSize
此時Imgae的長寬變成了200,即(100,100)/ (50 / 100) = (200, 200),符合計算規則
即當在其他情況不變的情況下,Sprite的PPU越大,在UI中的Image的原始尺寸越小
3.Image的PPU的其他應用
在計算ILayoutElement的preferredWidth和preferredHeight時也有用到
4. 當Canvas為World Space模式時
Camera的Size為0.5
此時Image的寬高需要是1才能讓相機視體的高剛好撐滿圖片
在官方文檔中有說明,是Sprite中的每一個像素將覆蓋世界中的一個單位,所以此時一個單位像素對應一個世界單位
參考鏈接幫你理清Unity中的Pixels Per Unit