Unity实现截图功能

作者:LLLLL__ 时间:2022-02-18 11:36:18 

本文实例为大家分享了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();
 }
}

来源:https://blog.csdn.net/LLLLL__/article/details/105263990

标签:unity,截图
0
投稿

猜你喜欢

  • Android自定义加载圈的方法

    2023-07-16 14:38:46
  • Java使用Gateway自定义负载均衡过滤器

    2022-06-27 03:55:09
  • SpringBoot的@Value给静态变量注入application.properties属性值

    2023-09-20 11:54:07
  • Javaweb开发环境Myeclipse6.5 JDK1.6 Tomcat6.0 SVN1.8配置教程

    2023-11-15 21:47:05
  • Android中Blade的使用方法

    2023-04-25 11:29:54
  • JAVA 中Spring的@Async用法总结

    2023-11-28 16:35:58
  • 详解Android中Notification通知提醒

    2023-09-10 09:57:19
  • C#以太网Sockets服务器设计实现

    2023-10-10 04:38:32
  • Spring事务注解@Transactional失效的八种场景分析

    2022-03-09 13:36:13
  • 全面解析JTA 深度历险

    2022-04-17 10:58:43
  • 使用SpringBoot获取resources文件路径

    2022-10-12 15:29:56
  • 使用Spring开启注解AOP的支持放置的位置

    2022-08-16 19:16:33
  • Android 实现定时任务的过程详解

    2023-06-14 02:28:33
  • C#从windows剪贴板获取并显示文本内容的方法

    2022-06-03 01:56:47
  • android计算器代码示例分享

    2023-10-14 14:06:58
  • android实现可自由移动、监听点击事件的悬浮窗

    2022-04-12 14:15:31
  • Spring4下validation数据校验无效(maven)的解决

    2022-01-24 03:01:04
  • Android中ListView分页加载数据功能实现

    2022-04-09 08:36:12
  • Easyui的combobox实现动态数据级联效果

    2022-02-15 07:26:13
  • Android Studio多渠道打包的配置方法

    2023-06-15 23:19:48
  • asp之家 软件编程 m.aspxhome.com