欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Unity 截图

程序员文章站 2022-07-13 22:06:33
...

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

 

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

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

Unity 截图

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

转载自:

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

 /// <summary>  
    /// 对相机截图。   
    /// </summary>  
    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

 /// <summary>  
    /// Captures the screenshot2.  
    /// </summary>  
    /// <returns>The screenshot2.</returns>  
    /// <param name="rect">Rect.截图的区域,左下角为o点</param>  
    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