//Sprite sprite;
//Texture2D texture;
void Caputure()
{
Rect rect = new Rect(new Vector2(0, 0), new Vector2(Screen.width, Screen.height));
Texture2D texture = CaptureByCamera(Camera.main, rect);
Sprite sprite = Sprite.Create(texture, rect, new Vector2(0.5f, 0.5f));
capture.sprite = sprite;
capture.gameObject.SetActive(true);
//texture = null;
//sprite = null;
}
//RenderTexture mRender;
Texture2D mTexture;
private Texture2D CaptureByCamera(Camera mCamera, Rect mRect)
{
//初始化RenderTexture 深度只能是【0、16、24】截不全图请修改
RenderTexture mRender = new RenderTexture((int)mRect.width, (int)mRect.height, 16);
//RenderTexture mRender = RenderTexture.GetTemporary((int)mRect.width, (int)mRect.height, 16);
//设置相机的渲染目标
mCamera.targetTexture = mRender;
//开始渲染
mCamera.Render();
//激活渲染贴图读取信息
RenderTexture.active = mRender;
if (mTexture == null)
{
mTexture = new Texture2D((int)mRect.width, (int)mRect.height, TextureFormat.RGB24, false);
}
//读取屏幕像素信息并存储为纹理数据
mTexture.ReadPixels(mRect, 0, 0);
//应用
mTexture.Apply();
//释放相机,销毁渲染贴图
mCamera.targetTexture = null;
RenderTexture.active = null;
GameObject.Destroy(mRender);
RenderTexture.ReleaseTemporary(mRender);
//mRender = null;
//需要展示次截图,可以返回截图
return mTexture;
}
最耗内存的是new Texture2D(),所以使用全局变量,防止频繁new新变量
if (mTexture == null)
{
mTexture = new Texture2D((int)mRect.width, (int)mRect.height, TextureFormat.RGB24, false);
}