常用的截屏函数是:
UnityEngine.ScreenCapture.CaptureScreenshot(fileName, 5);
//5代表dpi大小,数字越大越清晰
但是这样保存图片是不能将黑色背景的透明度设为0,最终还是24bit图。
 如果将背景透明度设为0而渲染物体透明度设为255,则可以借助Texture::ReadPixels
    private Texture2D outputTexture;
    void Start()
    {
	  	
    }
    void Update()
    {
    ...
        if (Input.GetKeyDown(KeyCode.P))//按下p键截屏
        {
            ImageCap();
        }
	...
	}
    public void ImageCap()
    {
        count++;
        Debug.Log("YourPath/" + count + ".png");
        StartCoroutine(MyCaptureFrame());//StartCoroutine开辟辅助线程
    }
    
    public void ImageSavePng()
    {
        string filepath = "YourPath/";
        string path = string.Format("{0}/{1:D04} shot.png", filepath, count);
        var pngShot = outputTexture.EncodeToPNG();
        File.WriteAllBytes(path, pngShot);
    }
    public void ImageRenderTextureToPNG()
    {
        outputTexture = new Texture2D(Screen.width - 1, Screen.height - 1);
        outputTexture.ReadPixels(new Rect(0, 0, Screen.width - 1, Screen.height - 1), 0, 0);
        outputTexture.Apply();
        ImageSavePng();
        RenderTexture.active = oldRT;
    }
    IEnumerator MyCaptureFrame()
    {
        yield return new WaitForEndOfFrame();
        ImageRenderTextureToPNG();
    }
StartCoroutine 是我之前没有见过的函数,查了一下,是用于开辟辅助线程的。如果不使用该方法的话,会有下面的错误:
 
 WaitForEndOfFrame,顾名思义是在等到本帧的帧末进行在进行处理
| 指令 | 描述 | 实现 | 
|---|---|---|
| WaitForSeconds | 等待指定秒数 | yield return new WaitForSeconds(2) | 
| WaitForFixedUpdate | 等待一个固定帧 | yield return new WaitForFixedUpdate(); | 
| WaitForEndOfFrame | 等待帧结束 | yield return new WaitForEndOfFrame(); | 
| StartCoroutine | 等待一个新协程结束 | yield return StartCoroutine(other coroutine); | 
参考:
https://blog.csdn.net/qq_15020543/article/details/82701551
记得,在截屏前还需要将相机背景透明度设置为0
 



















