unity图片内存优化

我基本都是做移动端,但也涉及到网页端,主要还是针对移动端优化,优化涉及到的问题基本都是图片的使用方式,图片一定要使用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) ;//根据你的点集,算出你使用的宽度
	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 = texture.height;
			
	int pixelsW = (int)imgWidth;
	int pixelsH = (int)imgHeight;

	Color[] colors = texture.GetPixels(0, 0, pixelsW, pixelsH);//获取从(0~pixeW)宽度,(0~pixeH)高度的图片裁剪
	curNewT2D = new Texture2D(pixelsW, pixelsH);//new一个新的需要这个大小的图片
	curNewT2D.SetPixels(colors);//把上面获得的赋给它
	curNewT2D.Apply();//curNewT2D就是新的一张图,就是自己设定的大小



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值