unity圖片記憶體優化
阿新 • • 發佈:2019-02-07
我基本都是做移動端,但也涉及到網頁端,主要還是針對移動端優化,優化涉及到的問題基本都是圖片的使用方式,圖片一定要使用2的N次方,這個是一定一定的,NGUI圖集預設是大圖是2的N次方,所以使用他的圖集的時候不用考慮,大圖烘焙圖我建議使用2的N次方的大小的圖,要不大家遲早會跳進這個坑,然後如果你使用的圖的大小比實際圖小的時候,可以使用uv演算法,也可以用裁剪法,
- public Vector2[] ReturnNewUV(Vector2[] uvpoints, Texture2D tex, Vector2[] ActualPoint)
- {
-
float length = 0;
- float width = 0;//需要圖的寬度
- Vector2 v2_default = ActualPoint[0];
- float minX = v2_default.x;
- float maxX = v2_default.x;
- float minZ = v2_default.y;
- float maxZ = v2_default.y;
- for (int i = 0; i < ActualPoint.Length; i++)
- {
-
Vector2 v2 = ActualPoint[i];
- if (minX > v2.x)
- {
- minX = v2.x;
- }
- if (maxX < v2.x)
- {
- maxX = v2.x;
- }
- if (minZ > v2.y)
- {
- minZ = v2.y;
- }
-
if
- {
- maxZ = v2.y;
- }
- }
- length = (maxX - minX) ;//根據你的點集,算出你使用的長度
- width = (maxZ - minZ) ;<span style="font-family: Arial, Helvetica, sans-serif;">//根據你的點集,算出你使用的寬度</span>
- float minXX = uvpoints[0].x;
- float maxXX = uvpoints[0].x;
- float minZZ = uvpoints[0].y;
- float maxZZ = uvpoints[0].y;
- for (int i = 0; i < uvpoints.Length; i++)
- {
- Vector2 v2 = uvpoints[i];
- if (minXX > v2.x)
- {
- minXX = v2.x;
- }
- if (maxXX < v2.x)
- {
- maxXX = v2.x;
- }
- if (minZZ > v2.y)
- {
- minZZ = v2.y;
- }
- if (maxZZ < v2.y)
- {
- maxZZ = v2.y;
- }
- }//uv點集中最大x,y值
- //把這些uv點除以最大x,y值,保證uv在(0~1)之間,這樣就可以把一張圖鋪上去,如果想根據你的需要去使用這張圖的比例,就乘以你的使用大小/圖片的實際大小
- for (int i = 0; i < uvpoints.Length; i++)
- {
- //uvpoints[i].x / maxX 縮小uv的X保證x在0~1之間
- //uvpoints[i].y / maxZ) 縮小uv的Z保證z在0~1之間
- //length / tex.width 當前長度與圖片長度的比例
- //wight / tex.height 當前寬度與圖片寬度的比例
- uvpoints[i] = new Vector2((uvpoints[i].x / maxXX*length / tex.width ) , (uvpoints[i].y / maxZZ*wight / tex.height ) );
- }
- return uvpoints;
- }
使用方法mesh.uv = ReturnNewUV(,,,,)還有一種方法是圖片裁剪的方法
- float xNum = 0;
- float yNum = 0;
- xNum = Mathf.Abs(maxX - minX) ;
- yNum = Mathf.Abs(maxZ - minZ) ;
- float imgWidth = texture.width;//texture原始圖片
- float imgHeight = <span style="font-family: Arial, Helvetica, sans-serif;">texture</span><span style="font-family: Arial, Helvetica, sans-serif;">.height;</span>
- int pixelsW = (int)imgWidth;
- int pixelsH = (int)imgHeight;
- Color[] colors = <span style="font-family: Arial, Helvetica, sans-serif;">texture</span><span style="font-family: Arial, Helvetica, sans-serif;">.GetPixels(0, 0, pixelsW, pixelsH);//獲取從(0~pixeW)寬度,(0~pixeH)高度的圖片裁剪</span><span style="font-family: Arial, Helvetica, sans-serif;">
- /span> curNewT2D = new Texture2D(pixelsW, pixelsH);//new一個新的需要這個大小的圖片
- curNewT2D.SetPixels(colors);//把上面獲得的賦給它
- curNewT2D.Apply();//curNewT2D就是新的一張圖,就是自己設定的大小