肯定是要使用圖集
使用圖集肯定是要把圖片訪問一個檔案夾對檔案夾下所有圖集打成一個圖集的,使用圖集的時候還可以
1.替換重復資源參考,減少重復圖片
2. 移動同屏UI圖片到指定路徑,降低圖集占用記憶體大小,非同屏UI圖片并到一個圖集,圖集肯定很大,
3.洗掉無參考圖片和檔案夾
4.計算圖集填充率,圖集內空白過多,說明這圖集有問題
5.批量對需要拉伸的圖片進行檢測和修改,由于特殊原因,可以有效減少拉伸圖片資源的大小,
要做這些事情,首先肯定要知道所有UI預制體參考的所有圖片資源,這個對每個預制體進行
string[] arr = AssetDatabase.GetDependencies(AssetDatabase.GetAssetPath(prefab));
回傳 arr里面后綴名是.png的就是圖片了,把這些映射保存到字典,里面,然后專案里面的圖片不在字典里面的,那就是無參考的了,這里排除動態加載資源圖片的情況,
另一個更好用的工具

這個東西,CollectDependenciesInfo 介面一調,根據資源路徑獲得assetDict 里的AssetDescription里的references的數量為0就說明是無人參考的,
第3點好解決,
第一點,計算每個參考了的資源圖片的md5值,MD5相等說明是重復的,找到這些重復的,把參考他們的對應的prefab檔案進行修改,挑一個圖片,把prefab檔案里面這個重復圖片資源的GUID,修改成要替換的那個.
第一點就這樣,

第二點就是隨便找個地方配置一下,把同屏一下子都會顯示出來的UI預制體資訊記錄一下,關于他們的圖片就移動到一個目錄下就可以了,而如果一張圖片所參考的預制體分別處于不同的同屏顯示的情況下,就創建一個Common目錄,把它移這下面去,
第4點
這要看打圖集的演算法是什么,會不會生成對應的資訊檔案,里面是否包含填充率資訊,
第5點 要設定圖片可讀
這里優化的點具體是要用來拉伸平鋪多余像素的是中間部分的像素,這部分像素只需要保留一個像素也就是1x1就可以了,所以如果中間像素過多了

變成

圖片分成九宮格形式,用來拉伸的像素肯定是中間的像素,只需要有一個就行了,其他不管,就可以最大效率降低圖片資源,
檢測中間像素面積,就直接從中間像素值開始,回圈一點點像左看,找到和中間像素顏色不一樣位置,記錄上一個相同像素位置的xleft,同理找到xright,ydown,yup,中間面積求出,


利用第一張圖獲得中間一列像素的像素陣列,然后把x往左移,求那一列像素陣列,如果幾乎相同,繼續左移直到不同,就知道xleft, 同理求出xright.
第二張圖y下移求ydown,上移求yup,
int midColumn = xright - xleft;
int midRow = yup-ydown;
if (midColumn <= 0 && midRow > 0)
{
說明左右一個空相等的像素都沒有,說明只能上下拉伸
}
else if (midColumn > 0 && midRow <= 0)
{
只能左右拉伸
}
else if (midColumn > 0 && midRow > 0)
{
都可以
}
只能上下拉伸:

就能圖片中分別取出這三塊像素數據,然后自己創建個新的圖片填充即可,
只能左右拉伸:

左右上下都可拉伸:

就求這幾塊就行了,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/388017.html
標籤:其他
