1. 程式人生 > >unity開發之四:攝像機渲染紋理RenderTexture的使用

unity開發之四:攝像機渲染紋理RenderTexture的使用

一.首先我們得拿到渲染紋理
我們在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); } } }

關於ugui滑動列表的使用,最關鍵的是子項的建立和銷燬,但是當我們不停的建立銷燬子項的時候,會產生很多記憶體碎片,很不好,然後我們產生了物件池這個概念,但是我們還有另外一種做法,就是不進行子項的建立和銷燬,而是替換子項的資料,不停的去重新整理子項資料!下一節主要講ugui滑動列表,並且實現這種功能!