Unity中实现截图功能

一:使用Unity自带API

using UnityEngine;
using UnityEngine.UI;

public class ScreenShotTest : MonoBehaviour
{
    public RawImage img;

    private void Update()
    {
        //使用ScreenCapture.CaptureScreenshot
        if (Input.GetKeyDown(KeyCode.A))
        {
            ScreenCapture.CaptureScreenshot(Application.dataPath + "/Resources/Screenshot.jpg");
            img.texture = Resources.Load<Texture>("Screenshot");
        }

        //使用ScreenCapture.CaptureScreenshotAsTexture
        if (Input.GetKeyDown(KeyCode.S))
        {
            img.texture = ScreenCapture.CaptureScreenshotAsTexture(0);
        }

        //使用ScreenCapture.CaptureScreenshotAsTexture
        if (Input.GetKeyDown(KeyCode.D))
        {
            RenderTexture renderTexture = new RenderTexture(720, 1280, 0);
            ScreenCapture.CaptureScreenshotIntoRenderTexture(renderTexture);
            img.texture = renderTexture;
        }
    }
}

经过测试,使用ScreenCapture.CaptureScreenshotAsTexture和ScreenCapture.CaptureScreenshotAsTexture截取的都是整个屏幕,相当于手机的截屏,无法自定义截图区域,作用不大。使用ScreenCapture.CaptureScreenshot会有延迟。


二:通过Texture2D.ReadPixels来读取屏幕区域像素

using UnityEngine;
using System.Collections;
using System;

public class ScreenShotTest : MonoBehaviour
{
    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.A))
        {
            StartCoroutine(CaptureByRect());
        }
    }

    private IEnumerator CaptureByRect()
    {
        //等待渲染线程结束
        yield return new WaitForEndOfFrame();
        //初始化Texture2D, 大小可以根据需求更改
        Texture2D mTexture = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false);
        //读取屏幕像素信息并存储为纹理数据
        mTexture.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
        //应用
        mTexture.Apply();
        //将图片信息编码为字节信息
        byte[] bytes = mTexture.EncodeToPNG();
        //保存(不能保存为png格式)
        string fileName = DateTime.Now.Hour + ":" + DateTime.Now.Minute + ":" + DateTime.Now.Second + ".jpg";
        System.IO.File.WriteAllBytes(Application.streamingAssetsPath + "/ScreenShot/" + fileName, bytes);

        UnityEditor.AssetDatabase.Refresh();
    }
}

 

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hello Bug.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值