Unity截屏

方式一:直接使用unity自带的截图函数

1 Application.CaptureScreenshot(“imagename”);

保存路径:

  1. 在PC上保存路径为Application.dataPath(项目所在的路径)
  2. 在安卓或者Iphone平台上保存路径为Application.persistentDataPath(游戏里保存数据时放的一个持久数据目录)

优点:简单粗暴

缺点:PC、Mac上正常,但是在移动平台上会出现卡顿现象。

方式二:通过屏幕缓存转化为Png图片进行截图。

IEnumerator GetCapture()

  {
      //等待所有的摄像机跟GUI渲染完成
      yield return new WaitForEndOfFrame();
      int width = Screen.width;
      int height = Screen.height;
      Texture2D tex = new Texture2D(width, height, TextureFormat.RGB24, false);
      //如果 recalculateMipMaps 设置为真,这个贴图的mipmaps就会更新 如果 recalculateMipMaps设置为假,你需要调用Apply重新计算它们
      tex.ReadPixels(new Rect(0, 0, width, height), 0, 0, true);
      byte[] imagebytes = tex.EncodeToPNG();//转化为png图
      tex.Compress(false);//对屏幕缓存进行压缩
      System.IO.File.WriteAllBytes(Application.dataPath + "/screencapture" + shotID + ".png", imagebytes);//存储png图
  }

方式三:截图特定相机的可视图

public void ShotThree()
  {
      RenderTexture renderTex = new RenderTexture(Screen.width,Screen.height,0);
      if (shotCamera.targetTexture == null)
      {
          shotCamera.targetTexture = renderTex;
      }
      //手动渲染相机。
      shotCamera.Render();
      //所有的渲染将进入激活的RenderTexture,如果活动的RenderTexture为null,所有的东西都被渲染到主窗口
      RenderTexture.active = renderTex;
      Texture2D screenShot = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false);    screenShot.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);//
      screenShot.Apply();
      // 重置相关参数,以使用camera继续在屏幕上显示
      shotCamera.targetTexture = null;
      RenderTexture.active = null; // JC: added to avoid errors
      Destroy(renderTex);
      // 最后将这些纹理数据,成一个png图片文件
      byte[] bytes = screenShot.EncodeToPNG();
      string filename = Application.dataPath + "/Screenshot.png";
      shotID++;
      System.IO.File.WriteAllBytes(shotPath + "/screencapture" + shotID + ".png", bytes);
  }

扩展方式四:鼠标画区域截取,实现方式方式二,核心思想为记录鼠标按下跟抬起的点,算出矩形,读取该矩形范围内的像素保存为png图片。

时间: 2024-08-25 15:01:55

Unity截屏的相关文章

Unity 截屏

//截屏 public void CaptureScreen2(Camera c, Rect r) { //捕抓摄像机图像并转换成字符数组 RenderTexture rt = new RenderTexture((int)r.width, (int)r.height, 0); //targetTexture目标纹理 c.targetTexture = rt; //Render手动渲染相机 c.Render(); //active目前活跃的渲染纹理 RenderTexture.active =

Unity图片处理类,包括压缩、截屏和滤镜

先上代码: 1 using System.Threading; 2 using UnityEngine; 3 using System.IO; 4 using System.Collections; 5 6 public class TextureUtility 7 { 8 public class ThreadData 9 { 10 public int start; 11 public int end; 12 public ThreadData (int s, int e) { 13 sta

VR中特定相机截屏问题与实现

本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/71136498 作者:cartzhang unity 中的截图与VR中的截图,难度还不一样么?还真有点不一样. 这里就是用HTC Vive头盔下来做为例子. 非常感谢同事让我来帮他解决问题. 一.Unity中的常用截图方式 unity中常用截图的方式有三种: 1. 使用CaptureScreenshot 这个可以参考官方给的例

Unity3D游戏开发之如何截屏的技能培训

下面我们开始今天的Unity3D技能培训. 我们学习Unity3D培训目标:让U3D初学者可以更快速的掌握U3D技术,自行制作修改素材,可以独立完成2D.3D小规模游戏及网页游戏开发. 今天我们来做点简单的东西,做个什么呢?答案就是截屏.作为一名热爱单机游戏的玩家,每次在玩游戏的同时截取游戏中比较喜欢的画面,特别是学习了Unity3D以后玩游戏的时候更多地是从一个游戏设计者的角度来看待游戏,换句话说,可能关注技术的成分更多一点吧.比如在写<Unity3D游戏开发之自由视角下的角色控制>和<

unity3d 3中截屏方法

每天一点知识点(Unity中三种截屏方法)热度 231388 2015-9-1 11:29 |个人分类:学习笔记| 知识点, 截屏 /// <summary> /// 截取全屏的方法包括UI /// </summary> public void CaptureScreen() { Application.CaptureScreenshot("截取全屏.png", 0); Debug.Log(1); } /// <summary> /// 自定义截图大

Android 7.1.1 系统截屏

frameworks/base/packages/SystemUI/src/com/android/systemui/screenshot/TakeScreenshotService.java TakeScreenshotService.java package com.android.systemui.screenshot; import android.app.Service; import android.content.Intent; import android.os.Handler;

超好用的滚动屏幕截屏工具FastStone Capture

对于超级喜欢整理的技术控,一看到比较好技术文章就想收集下来,单纯的记录网页,又怕作者删除,我只能选择截图,可是有许多文章特别长,直到使用FastStone Capture截图工具,终于可以快速收集这些技术文章了. 1.截图工具是这样的 2.比较好用的滚动截屏使用方法: 图中第六个图标. 1)点击后,可以拖动窗口进行大范围的截图,比如可以将浏览器的网页做为截图对象,截取时,点击选取滚动条箭头就可以完成截图,ESC中断截图滚动! 2)在选定滚动截图图标后还可以按ctrl键进行滚动区域的选择. 3.图

Android自己定义截屏功能,相似QQ截屏

由于公司业务需求 须要对一个屏幕进行截屏.但自带的截屏功能是远远不够项目的功能需求 ,我们是做一个画板软件 .须要的像QQ那样截屏之后 ,能够看到我们自己定义的工具.有画笔,button等等 .android自带的功能非常easy,仅仅须要Intent隐式调用就全然足够了.但他是系统的应用 ,界面固定.无法定制改动.实现方法跟办法有非常多种,以下记录下我实现的方法 .我是这样一个思路 ,重写一个View组件 ,在OnDraw里面仅仅负责不绘图形(包含半透明的四个矩形,亮框矩形,亮框上的四个小圆点

Snipaste强大离线/在线截屏软件的下载、安装和使用

步骤一: https://zh.snipaste.com/  ,去此官网下载. 步骤二:由于此是个绿色软件,直接解压即可. 步骤三:使用,见官网.ttps://zh.snipaste.com  按F1开始截屏 感谢下面哥的精彩微信文章 http://mp.weixin.qq.com/s?__biz=MzIwNzYwODYwMw==&mid=2247483903&idx=1&sn=02121fe920320bbe7b2fae012a18e70a&chksm=970e8f8ba