Unity 利用Render Texture 快照

一.首先我们得拿到渲染纹理 
我们在project面板creat一个RenderTexture,然后把这个渲染纹理给相机的Rendertexture,如下图所示: 
 
然后如下面代码:

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);//写入本地

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

    /// <summary>
    /// 往面料滑动列表刷数据
    /// </summary>
    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<Image>();
            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);
            }
        }
    }
---------------------

猜你喜欢

转载自blog.csdn.net/liu943367080/article/details/86622709