unity開發之四:攝像機渲染紋理RenderTexture的使用
阿新 • • 發佈:2019-01-27
一.首先我們得拿到渲染紋理
我們在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滑動列表,並且實現這種功能!