Unity 截图

截图之后 尽量不要调用 AssetDatabase.Refresh();  不然我的 Opencv 会出问题(有时间再去看看是啥问题)

 

1. 只能截全屏 , 有UI,方便的是 它会帮你自动保存, 也能直接截图成 Texture2D 方便使用

   ScreenCapture.CaptureScreenshot (Application.streamingAssetsPath + "/Screenshots/" + CurrentPage + ".png");

Unity 截图_第1张图片

2. 对相机截图 有UI, 但是我在截图之后调用 AssetDatabase.Refresh(); 刷新文件夹的时候,使用 Opencv 的时候会出问题 

转载自:

https://blog.csdn.net/inlet511/article/details/46829433

 ///   
    /// 对相机截图。   
    ///   
    Texture2D CaptureCamera(Camera camera, Rect rect,string indexName)
    {
        // 创建一个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.streamingAssetsPath + "/Screenshots/" + indexName + ".png";
        System.IO.File.WriteAllBytes(filename, bytes);
        Debug.Log(string.Format("截屏了一张照片: {0}", filename));
//#if UNITY_EDITOR
       // AssetDatabase.Refresh();
//#endif
        return screenShot;
    }

3. 没有 UI

 ///   
    /// Captures the screenshot2.  
    ///   
    /// The screenshot2.  
    /// Rect.截图的区域,左下角为o点  
    public Texture2D CaptureScreenshot(Rect rect, string indexName)
    {
        // 先创建一个的空纹理,大小可根据实现需要来设置  
        Texture2D screenShot = new Texture2D((int)rect.width, (int)rect.height, TextureFormat.RGB24, false);

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

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

        // 最后,我返回这个Texture2d对象,这样我们直接,所这个截图图示在游戏中,当然这个根据自己的需求的。  
        return screenShot;
    }

 

你可能感兴趣的:(unity)