我基本都是做移动端,但也涉及到网页端,主要还是针对移动端优化,优化涉及到的问题基本都是图片的使用方式,图片一定要使用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)
- {
- 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就是新的一张图,就是自己设定的大小
本文来自:http://blog.csdn.net/itolfn/article/details/22856549