Unity3D save ScreenShots by 3 methods

本文介绍了Unity中实现截图的三种不同方法:通过Application类的CaptureScreenshot()方法进行全屏截图;利用Rect区域进行局部截图;以及通过Camera组件针对特定摄像机视角截图。每种方法都提供了详细的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/// <summary>  
    /// 使用Application类下的CaptureScreenshot()方法实现截图  
    /// 优点:简单,可以快速地截取某一帧的画面、全屏截图  
    /// 缺点:不能针对摄像机截图,无法进行局部截图  
    /// </summary>  
    /// <param name="mFileName">M file name.</param>  
    private void CaptureByUnity(string mFileName)  
    {  
        Application.CaptureScreenshot(mFileName,0);  
    }  
  
    /// <summary>  
    /// 根据一个Rect类型来截取指定范围的屏幕  
    /// 左下角为(0,0)  
    /// </summary>  
    /// <param name="mRect">M rect.</param>  
    /// <param name="mFileName">M file name.</param>  
    private IEnumerator CaptureByRect(Rect mRect,string mFileName)  
    {  
        //等待渲染线程结束  
        yield return new WaitForEndOfFrame();  
        //初始化Texture2D  
        Texture2D mTexture=new Texture2D((int)mRect.width,(int)mRect.height,TextureFormat.RGB24,false);  
        //读取屏幕像素信息并存储为纹理数据  
        mTexture.ReadPixels(mRect,0,0);  
        //应用  
        mTexture.Apply();  
          
          
        //将图片信息编码为字节信息  
        byte[] bytes = mTexture.EncodeToPNG();    
        //保存  
        System.IO.File.WriteAllBytes(mFileName, bytes);  
          
        //如果需要可以返回截图  
        //return mTexture;  
    }  
  
    private IEnumerator  CaptureByCamera(Camera mCamera,Rect mRect,string mFileName)  
    {  
        //等待渲染线程结束  
        yield return new WaitForEndOfFrame();  
  
        //初始化RenderTexture  
        RenderTexture mRender=new RenderTexture((int)mRect.width,(int)mRect.height,0);  
        //设置相机的渲染目标  
        mCamera.targetTexture=mRender;  
        //开始渲染  
        mCamera.Render();  
          
        //激活渲染贴图读取信息  
        RenderTexture.active=mRender;  
          
        Texture2D mTexture=new Texture2D((int)mRect.width,(int)mRect.height,TextureFormat.RGB24,false);  
        //读取屏幕像素信息并存储为纹理数据  
        mTexture.ReadPixels(mRect,0,0);  
        //应用  
        mTexture.Apply();  
          
        //释放相机,销毁渲染贴图  
        mCamera.targetTexture = null;     
        RenderTexture.active = null;   
        GameObject.Destroy(mRender);    
          
        //将图片信息编码为字节信息  
        byte[] bytes = mTexture.EncodeToPNG();    
        //保存  
        System.IO.File.WriteAllBytes(mFileName,bytes);  
          
        //如果需要可以返回截图  
        //return mTexture;  
    }  
  
}  

//定义图片保存路径  
    private string mPath1;  
    private string mPath2;  
    private string mPath3;  
  
    //相机  
    public Transform CameraTrans;  
  
    void Start()  
    {  
        //初始化路径  
        mPath1=Application.dataPath+"\\ScreenShot\\ScreenShot1.png";  
        mPath2=Application.dataPath+"\\ScreenShot\\ScreenShot2.png";  
        mPath3=Application.dataPath+"\\ScreenShot\\ScreenShot3.png";  
    }  
  
    //主方法,使用UGUI实现  
    void OnGUI()  
    {  
        if(GUILayout.Button("截图方式1",GUILayout.Height(30))){  
            CaptureByUnity(mPath1);  
        }  
        if(GUILayout.Button("截图方式2",GUILayout.Height(30))){  
            StartCoroutine(CaptureByRect(new Rect(0,0,1024,768),mPath2));  
        }  
        if(GUILayout.Button("截图方式3",GUILayout.Height(30))){  
            //启用顶视图相机  
            CameraTrans.camera.enabled=true;  
            //禁用主相机  
            Camera.main.enabled=false;  
            StartCoroutine(CaptureByCamera(CameraTrans.camera,new Rect(0,0,1024,768),mPath3));  
        }  
    }  
  
  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值