項目類型:2D游戲、豎屏、URP
其他類型,部分原理類似。
1、確定設計分辨率:750*1334
????????為什么是它?
????????因為它是 iphone8 的尺寸,寬高比適中。
????????方便后續適配到真機的 “更長屏” 或 “更寬屏”
2、在場景中添加 UICamera、MainCamera、UICanvas
????????添加物體及相關組件
????????
3、調整 UICamera 物體的 Camera 組件(URP下)
????????Render Type: Overlay? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (支持多相機顯示,要點)
????????Projection: Orthographic? ? ? ? ? ? ? ? ? ? ? ? ? (正交)
????????Size: 6.67? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(修改將影響 UICanvas 的 Scale 值)(注意,它不影響 Canvas 在 Game 視圖中的占比,因為 Canvas 總是填滿屏幕)
????????ClearDepth:true? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(多相機顯示正確,要點)
? ? ? ? Culling Mask:UI? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(使只渲染UI)
????????
4、調整 MainCamera 物體的 Camera 組件(URP下)
????????Render Type: Base
????????Projection: Orthographic? ? ? ? ? ? ? ? ? ? ? ? ? (正交)(2D游戲)
????????Size: 6.67? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(修改將影響 場景物體在 Game 視圖中的占比)
????????Culling Mask:去掉UI? ? ? ? ? ? ? ? ? ? ? ? ? ? ??(使不渲染UI)
? ? ? ? Stack 中,添加 UICamera? ? ? ? ? ? ? ? ? ? ? ?(相機關聯,支持多相機顯示,要點)
????????
5、調整 UICanvas 物體的 Canvas 組件
????????RenderMode: Screen Space-Camera
????????RenderCamera: 拖入 UICamera
????????SortingLayer: UI
????????
6、設置 UICanvas 物體的 Canvas Scaleer 組件
????????UI Scale Mode: Scale With Screen Size? ? (隨屏幕縮放) ? ? ?
????????Reference Resolution: 750*1334 ? ? ? ? ??????(設計分辨率)
????????Screen Match Mode: Expand ? ? ? ? ? ? ? ??????(總是擴展更大邊)(移動游戲通常采用無黑邊的適配方式)
????????Reference pixels Per Unit: 100? ? ? ? ? ? ? ? ? ?(控制精靈像素密度,具體見下方說明)
????????
注意:為什么是 6.67 ?
????????6.67 = 1334/2/100(若為橫屏游戲則為3.75)
其中:
????????1334 :設計分辨率的高(若為橫屏游戲則為750)
????????2 :OrthographicSize 為垂直視體大小的一半(Size屬性用于定義相機視圖的垂直大小)。
???????????Camera-orthographicSize - Unity 腳本 API
????????
????????100:UI坐標系 相對 場景世界坐標系的縮放倍數,即,在 Game 視圖?中??UI 中100像素 = 場景中世界坐標系的 1米
? ? ? ? 這個值來自 Canvas Scaler 的 Reference pixels Per Unit
????????Canvas-referencePixelsPerUnit - Unity 腳本 API
????????
? ? ? ? 為什么它決定了?UI坐標系 相對 場景世界坐標系 的縮放倍數?
? ? ? ? 因為:
? ? ? ? Image(UI坐標系中的物體)?SetNative 后的大小(單位:像素數) = 原圖像素數 / (Sprite 導入設置的 Pixels Per Unit / CanvasScaler設置的 Reference Pixels Per Unit)
????????SpriteRenderer(場景世界坐標系中的物體) 的大小(單位:米) = 原圖像素數 / Sprite 導入設置的 Pixels Per Unit
? ? ? ? 可以看到,兩者差的倍數正是?Canvas Scaler 的 Reference pixels Per Unit? ? ? ??
????????當兩者同時使用一張圖時,在?Game 視圖?中其大小是相同的
????????
對齊之美
????????1、將 MainCamera 的 Size 設為 6.67,將使世界物體 7.5m*13.34米的物體 剛好填充整個 MainCamera 的視口,即剛好填充 Game 視圖??的整個屏幕
????????
????????2、將 UICamera 的 Size 設為 6.67,將使 UICanvas 的 Scale 值為 0.01,在 Scene 視圖?中觀察,UICamera 和 MainCamera 的視口大小是重合的,UI與場景物體大小也是對齊的,完美!???????????????
?????????