使用背景
為了在UI中使用特效層,項目Canvas采用了Screen Space-Camera類型
UI的Scale Mode 選擇的是Scale With Screen Size 的Expand,畫布大小填的是1334, 750
在該選擇下,會自動根據分辨率適配寬度/高度。
自動適配的規則是:
屏幕實際寬高比值的 < 畫布大小的寬高比值 采用以寬度縮放
屏幕實際寬高比值的 > 畫布大小的寬高比值 采用以高度縮放
screen.width/screen.height < 1334/750
實際問題
1.血條或者頭頂的ui,跳字的位置會有偏差,根據3D坐標轉2D坐標的接口得到的坐標(Camera.main.WorldToScreenPoint)已經不適用了,需要做縮放。
縮放的解決方式:
以寬縮放,需要以寬的縮放比例去縮放高
ratio = 1334/screen.width
x = screen2d.x * ratio - screen.width/2 // 以寬度的比例求出x值(減去屏幕大小的一半是因為錨點在中心)
y = (screen2d.y - screen.height/2) * ratio // 直接以寬的比例求出y值
以高縮放,需要以高的縮放比例去縮放高
ratio = 750/screen.height
x = (screen2d.x - screen.width/2) * ratio // 直接以高的比例求出x值
y = screen2d.y * ratio - screen.height/2 // 以高度的比例求出y值(減去屏幕大小的一半是因為錨點在中心)
ui使用該坐標即可完美的適配
2.當遇到ipad這種寬高度比低的會以寬度適配,導致上下留白。
解決方式讓ui做高些,現在還沒做一些其他嘗試。先臨時處理
3.劉海屏
項目解決思路
打表的形式,ios有自己的接口screen.safearea,Android9之后有api接口,其他安卓廠商有自己的設定,只要把市面的機型劉海高度記錄下來,適配的時候直接使用即可。
ios安全范圍參考:
https://www.cnblogs.com/zhw511006/p/7735483.html
