Unity——实现截图


前言

在Unity3D中,截图功能是开发过程中常用的实用功能之一。通过截图功能,开发者可以在游戏或应用程序中捕捉当前屏幕的图像,并将其保存为图片文件。这里我们说两种实现方式,可以根据需要选择合适的方式。


一、使用ScreenCapture.CaptureScreenshot方法来截图。

using System.IO;
using UnityEngine;

public class Test : MonoBehaviour
{
    //文件名(时间戳)
    string fileName;
    //文件路径
    string filePath;
    void Start()
    {
        filePath = Application.dataPath + "/../SaveData/";//保存到根目录下的SaveData文件夹
        if (Directory.Exists(filePath) == false)//如果没有找到这个文件夹就创建一个
        {
            Directory.CreateDirectory(filePath);
        }
        fileName = System.DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss");

        //CameraCapture(Camera.main);
        TakeScreenshot();
    }

    public void TakeScreenshot()
    {
        // 截图保存的路径,可以自定义
        string path = filePath + fileName + ".png";

        // 截图,传入文件名和路径
        ScreenCapture.CaptureScreenshot(path);

        Debug.Log("Screenshot saved to: " + path);
    }
}

二、获取当前相机渲染来实现

using System.IO;
using UnityEngine;

public class Test : MonoBehaviour
{
    public float picWidth = 1920f;
    public float picHeight = 1080f;
    //文件名(时间戳)
    string fileName;
    //文件路径
    string filePath;
    void Start()
    {
        filePath = Application.dataPath + "/../SaveData/";//保存到根目录下的SaveData文件夹
        if (Directory.Exists(filePath) == false)//如果没有找到这个文件夹就创建一个
        {
            Directory.CreateDirectory(filePath);
        }
        fileName = System.DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss");

        CameraCapture(Camera.main);//这里也可以是其他相机
    }
    /// <summary>
    /// 截取图片
    /// </summary>
    /// <param name="m_Camera"></param>
    /// <param name="filename"></param>
    /// 
    Texture2D t2d;
    void CameraCapture(Camera m_Camera)
    {
        RenderTexture rt = new RenderTexture((int)picWidth, (int)picHeight, 16);
        m_Camera.targetTexture = rt;
        m_Camera.Render();
        RenderTexture.active = rt;
        Texture2D t = new Texture2D((int)picWidth, (int)picHeight);
        t.ReadPixels(new Rect(0, 0, t.width, t.height), 0, 0);
        t.Apply();
        t2d = t;
        //数据保存路径
        string path = filePath + fileName + ".png";
        System.IO.File.WriteAllBytes(path, t.EncodeToJPG());
        m_Camera.targetTexture = null;
    }
}

总结

这两种方法都可以实现截图功能,各有优劣,第一种比较简洁,不过截图的分辨率是当前窗口的分辨率,第二种则是可以手动设置截图的分辨率。

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值