Unity生成屏幕快照

 public static Texture2D CaptureCamera(Camera camera, Rect rect)
        {
            RenderTexture rt = new RenderTexture((int)rect.width, (int)rect.height, 0);
            RenderTexture originRtt = null;   
            Camera currCam = null;
            foreach (Camera cam in Camera.allCameras)
            {
                if (null != cam.targetTexture) continue;
                currCam = cam;
                originRtt = currCam.targetTexture;
                cam.targetTexture = rt;
                cam.RenderDontRestore();          //手动渲染
                cam.targetTexture = originRtt;    //注意: 需要该操作,不然会报错
            }

            //激活rt并从中读取像素
            RenderTexture.active = rt;
            Texture2D screenShot = new Texture2D((int)rect.width, (int)rect.height, TextureFormat.RGB24, false);
            screenShot.ReadPixels(rect, 0, 0);  //这个时候是从  RenderTexture.active 中读取数据
            screenShot.Apply();                 //这是非常消耗性能的操作,操作之前尽量多读取像素

            currCam.targetTexture = null;
            GameObject.Destroy(rt);
            RenderTexture.active = null;

            //生成 .png 快照
            byte[] bytes = screenShot.EncodeToPNG();
            string filename = Application.dataPath + "/Screenshot.png";
            System.IO.File.WriteAllBytes(filename, bytes);

            Debug.Log("生成了一张屏幕快照");

            return screenShot;
        }

调用:

UITexture m_TxBG.mainTexture = CaptureCamera(NGUITools.FindCameraForLayer(this.gameObject.layer), new Rect(0, 0, Screen.width, Screen.height));
原文地址:https://www.cnblogs.com/luguoshuai/p/8677707.html