unity图片内存优化 涉及到代码进行缩放

来源:互联网 发布:淘宝卖化妆品月赚20万 编辑:程序博客网 时间:2024/06/18 18:05

我基本都是做移动端,但也涉及到网页端,主要还是针对移动端优化,优化涉及到的问题基本都是图片的使用方式,图片一定要使用2的N次方,这个是一定一定的,NGUI图集默认是大图是2的N次方,所以使用他的图集的时候不用考虑,大图烘焙图我建议使用2的N次方的大小的图,要不大家迟早会跳进这个坑,然后如果你使用的图的大小比实际图小的时候,可以使用uv算法,也可以用裁剪法,

[csharp] view plaincopy在CODE上查看代码片派生到我的代码片
  1. public Vector2[] ReturnNewUV(Vector2[] uvpoints, Texture2D tex, Vector2[] ActualPoint)  
  2.     {  
  3.         float length = 0;//需要图的长度  
  4.         float width = 0;//需要图的宽度  
  5.         Vector2 v2_default = ActualPoint[0];  
  6.         float minX = v2_default.x;  
  7.         float maxX = v2_default.x;  
  8.         float minZ = v2_default.y;  
  9.         float maxZ = v2_default.y;  
  10.   
  11.         for (int i = 0; i < ActualPoint.Length; i++)  
  12.         {  
  13.             Vector2 v2 = ActualPoint[i];  
  14.             if (minX > v2.x)  
  15.             {  
  16.                 minX = v2.x;  
  17.             }  
  18.             if (maxX < v2.x)  
  19.             {  
  20.                 maxX = v2.x;  
  21.             }  
  22.             if (minZ > v2.y)  
  23.             {  
  24.                 minZ = v2.y;  
  25.             }  
  26.             if (maxZ < v2.y)  
  27.             {  
  28.                 maxZ = v2.y;  
  29.             }  
  30.         }  
  31.         length = (maxX - minX) ;//根据你的点集,算出你使用的长度  
  32.         width = (maxZ - minZ) ;<span style="font-family: Arial, Helvetica, sans-serif;">//根据你的点集,算出你使用的宽度</span>  
  33.     float minXX = uvpoints[0].x;  
  34.     float maxXX = uvpoints[0].x;  
  35.     float minZZ = uvpoints[0].y;  
  36.     float maxZZ = uvpoints[0].y;  
  37.     for (int i = 0; i < uvpoints.Length; i++)  
  38.     {  
  39.         Vector2 v2 = uvpoints[i];  
  40.         if (minXX > v2.x)  
  41.         {  
  42.         minXX = v2.x;  
  43.         }  
  44.         if (maxXX < v2.x)  
  45.         {  
  46.         maxXX = v2.x;  
  47.         }  
  48.         if (minZZ > v2.y)  
  49.         {  
  50.         minZZ = v2.y;  
  51.         }  
  52.         if (maxZZ < v2.y)  
  53.         {  
  54.         maxZZ = v2.y;  
  55.         }  
  56.         }//uv点集中最大x,y值  
  57.         //把这些uv点除以最大x,y值,保证uv在(0~1)之间,这样就可以把一张图铺上去,如果想根据你的需要去使用这张图的比例,就乘以你的使用大小/图片的实际大小  
  58.         for (int i = 0; i < uvpoints.Length; i++)  
  59.         {  
  60.             //uvpoints[i].x / maxX 缩小uv的X保证x在0~1之间  
  61.             //uvpoints[i].y / maxZ) 缩小uv的Z保证z在0~1之间  
  62.             //length / tex.width 当前长度与图片长度的比例  
  63.             //wight / tex.height 当前宽度与图片宽度的比例  
  64.             uvpoints[i] = new Vector2((uvpoints[i].x / maxXX*length / tex.width )  , (uvpoints[i].y / maxZZ*wight / tex.height ) );  
  65.          
  66.         }  
  67.         return uvpoints;  
  68.     }  

使用方法mesh.uv = ReturnNewUV(,,,,)还有一种方法是图片裁剪的方法

  1.        float xNum = 0;  
  2. float yNum = 0;  
  3.          
  4. xNum = Mathf.Abs(maxX - minX) ;  
  5. yNum = Mathf.Abs(maxZ - minZ) ;  
  6.           
  7. float imgWidth = texture.width;//texture原始图片  
  8. float imgHeight = <span style="font-family: Arial, Helvetica, sans-serif;">texture</span><span style="font-family: Arial, Helvetica, sans-serif;">.height;</span>  
  9.           
  10. int pixelsW = (int)imgWidth;  
  11. int pixelsH = (int)imgHeight;  
  12.   
  13. 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;">  
  14. /span>  curNewT2D = new Texture2D(pixelsW, pixelsH);//new一个新的需要这个大小的图片  
  15. curNewT2D.SetPixels(colors);//把上面获得的赋给它  
  16. curNewT2D.Apply();//curNewT2D就是新的一张图,就是自己设定的大小  


本文来自:http://blog.csdn.net/itolfn/article/details/22856549
0 0
原创粉丝点击