[Unity基础]三种截图方法

原文链接:

http://blog.csdn.net/anyuanlzh/article/details/17008909


using UnityEngine;
using System.Collections;
using UnityEditor;

public class CaptureScreen : MonoBehaviour {
    void Start()
    {
        //Capture(); 
        //StartCoroutine(Capture2(new Rect(0, 0, Screen.width, Screen.height)));
        //Capture3(Camera.main, new Rect(0, 0, Screen.width, Screen.height));

        Camera uiCamera = GameObject.Find("UICamera").GetComponent();
        Capture3(uiCamera, new Rect(0, 0, Screen.width, Screen.height));
    }

    public void Capture()
    {
        //保存在工程的根目录下
        Application.CaptureScreenshot("Screenshot.png");
        Debug.Log("Capture");
    }

    // 读取屏幕像素
    public IEnumerator Capture2(Rect rect)
    {
        // 先创建一个的空纹理,大小可根据实现需要来设置  
        Texture2D screenShot = new Texture2D((int)rect.width, (int)rect.height, TextureFormat.RGB24, false);

        // 读取屏幕像素信息并存储为纹理数据
        yield return new WaitForEndOfFrame();
        screenShot.ReadPixels(rect, 0, 0, false);
        screenShot.Apply();

        // 然后将这些纹理数据,成一个png图片文件  
        byte[] bytes = screenShot.EncodeToPNG();
        string filename = Application.dataPath + "/Screenshot2.png";
        System.IO.File.WriteAllBytes(filename, bytes);

        AssetDatabase.Refresh();
        Debug.Log(string.Format("截屏了一张图片: {0}", filename));
    }

    // 读取RenderTexture像素
    Texture2D Capture3(Camera camera, Rect rect)
    {
        // 创建一个RenderTexture对象  
        RenderTexture rt = new RenderTexture((int)rect.width, (int)rect.height, 0);
        // 临时设置相关相机的targetTexture为rt, 并手动渲染相关相机  
        camera.targetTexture = rt;
        camera.Render();
        //ps: --- 如果这样加上第二个相机,可以实现只截图某几个指定的相机一起看到的图像。  
        //ps: camera2.targetTexture = rt;  
        //ps: camera2.Render();  
        //ps: -------------------------------------------------------------------  

        // 激活这个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();

        // 重置相关参数,以使用camera继续在屏幕上显示  
        camera.targetTexture = null;
        //ps: camera2.targetTexture = null;  
        RenderTexture.active = null; // JC: added to avoid errors  
        GameObject.Destroy(rt);

        // 最后将这些纹理数据,成一个png图片文件  
        byte[] bytes = screenShot.EncodeToPNG();
        string filename = Application.dataPath + "/Screenshot3.png";
        System.IO.File.WriteAllBytes(filename, bytes);
        AssetDatabase.Refresh();
        Debug.Log(string.Format("截屏了一张照片: {0}", filename));

        return screenShot;
    } 
}


你可能感兴趣的:(Unity基础)