unity开发之四:摄像机渲染纹理RenderTexture的使用

一.首先我们得拿到渲染纹理
我们在project面板creat一个RenderTexture,然后把这个渲染纹理给相机的Rendertexture,如下图所示:
unity开发之四:摄像机渲染纹理RenderTexture的使用_第1张图片
然后如下面代码:

RenderTexture renderTexture = _mainCamera.targetTexture;//拿到目标渲染纹理
RenderTexture.active = renderTexture;
Texture2D tex = new Texture2D(renderTexture.width, renderTexture.height);//新建纹理存储渲染纹理
tex.ReadPixels(new Rect(0, 0, renderTexture.width, renderTexture.height), 0, 0);//把渲染纹理的像素给Texture2D,才能在项目里面使用
tex.Apply();//记得应用一下,不然很蛋疼
byte[] bytes = tex.EncodeToPNG();//拿到图片的byte
File.WriteAllBytes(Application.dataPath + "/Resources/ScreenShort/" + _index .ToString()+ ".png", bytes);//写入本地

二.把拿到的渲染纹理,加入滑动列表,成为子项

    /// 
    /// 往面料滑动列表刷数据
    /// 
    private void UpadteClothData()
    {
        ClearPrintData(_iteCloths);
        for (int i = 0; i < _CustomDatas.Count; i++)
        {
            //根据数据个数实例化滑动列表子项
            Button item = Instantiate(_item);
            item.name = _CustomDatas[i].id.ToString();
            CustomData clothdata = _CustomDatas[i];
            Image[]  _ClothImags = item.GetComponentsInChildren();
            for (int j = 0; j < _ClothImags.Length; j++)
            {
                if (_ClothImags[j].name == "sprite")
                {
                    Sprite spr = Sprite.Create(_CustomDatas[i].spr, new Rect(0, 0, _CustomDatas[i].spr.width, _CustomDatas[i].spr.height), Vector2.zero);
                    spr.name = j.ToString();
                    _ClothImags[j].sprite = spr;
                }
                item.transform.SetParent(_ScreenshotScrollView.transform);
                item.transform.localPosition = new Vector3(item.transform.localPosition.x, item.transform.localPosition.y, _ScreenshotScrollView.transform.position.z);
                item.transform.localScale = new Vector3(2, 2, 2);
                _iteCloths.Add(item);
            }
        }
    }

关于ugui滑动列表的使用,最关键的是子项的创建和销毁,但是当我们不停的创建销毁子项的时候,会产生很多内存碎片,很不好,然后我们产生了对象池这个概念,但是我们还有另外一种做法,就是不进行子项的创建和销毁,而是替换子项的数据,不停的去刷新子项数据!下一节主要讲ugui滑动列表,并且实现这种功能!

你可能感兴趣的:(Unity3d学习旅程)