团结实现相机截图功能的方法

  介绍

这篇文章主要讲解了团结实现相机截图功能的方法,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。

最近做项目的时候需要在游戏里截一张高清截的图,研究了一下写成脚本,方便以后使用。

脚本可以自定义分辨率,用相机截高清截的图。可以用代码动态截的图,也可以在编辑模式下截的图。

注意截图宽高比要正确,宽高比不正确时可能会出问题。

截图效果:

团结实现相机截图功能的方法

团结实现相机截图功能的方法

团结实现相机截图功能的方法

<强>脚本:

CameraCapture。cs

;
  使用先;///& lt; summary>///相机截的图///& lt; para>张宇2018 - 07 - 06 - & lt;/para>///& lt;/summary>
  公共类CameraCapture: MonoBehaviour {//截图尺寸
  公共enum CaptureSize {
  CameraSize,
  ScreenResolution,
  FixedSize
  }//目标摄像机
  公共摄像头targetCamera;//截图尺寸
  公共CaptureSize CaptureSize=CaptureSize.CameraSize;//像素尺寸
  公共Vector2 pixelSize;//保存路径
  公共字符串savePath=癝treamingAssets/?//文件名称
  公共字符串文件名=癱ameraCapture.png";
  
  #如果UNITY_EDITOR
  私人空间重置(){
  targetCamera=GetComponent ();
  pixelSize=new Vector2 (Screen.currentResolution。宽度,Screen.currentResolution.height);
  }
  # endif///& lt; summary>保存截图& lt;/summary>///& lt;参数name=癱amera"在目标摄像机& lt;/param>
  公共空间saveCapture () {
  Vector2大?pixelSize;
  如果(captureSize==CaptureSize.CameraSize) {
  大?new Vector2 (targetCamera。pixelWidth targetCamera.pixelHeight);
  }else if (captureSize==CaptureSize.ScreenResolution) {
  大?new Vector2 (Screen.currentResolution。宽度,Screen.currentResolution.height);
  }
  字符串路径=应用程序。dataPath公司+“/?+ savePath +文件名;
  saveTexture(路径,捕捉(targetCamera (int)大小。x (int) size.y));
  }///& lt; summary>相机截图& lt;/summary>///& lt;参数name=癱amera"在目标相机& lt;/param>
  公共静态Texture2D捕获(相机相机){
  捕获(摄像头,屏幕返回。宽度,Screen.height);
  }///& lt; summary>相机截图& lt;/summary>///& lt;参数name=癱amera"在目标相机& lt;/param>///& lt;参数name=皐idth"在宽度& lt;/param>///& lt;参数name=癶eight"在高度& lt;/param>
  公共静态Texture2D捕获(相机相机,int宽度,int高度){
  RenderTexture rt=new RenderTexture(宽度、高度,0);
  rt.depth=24;
  rt.antiAliasing=8;
  相机。targetTexture=rt;
  camera.RenderDontRestore ();
  RenderTexture。积极=rt;
  Texture2D纹理=new Texture2D(宽度、高度,TextureFormat。ARGB32,假的,真正的);
  矩形矩形=new矩形(0,0,宽度、高度);
  纹理。ReadPixels(矩形,0,0);
  纹理。filterMode=FilterMode.Point;
  texture.Apply ();
  相机。targetTexture=零;
  RenderTexture。积极=零;
  破坏(rt);
  返回纹理;
  }///& lt; summary>保存贴图& lt;/summary>///& lt;参数name=皃ath"在保存路径& lt;/param>///& lt;参数name=皌exture"祝辞Texture2D
  公共静态孔隙saveTexture (string路径,Texture2D纹理){
  文件。WriteAllBytes(路径,texture.EncodeToPNG ());
  #如果UNITY_EDITOR
  Debug.Log(“已保存截图到:“+路径);
  # endif
  }
  
  }

脚本编辑器:

CameraCaptureEditor。cs

;
  使用UnityEngine;///& lt; summary>///相机截图编辑器///& lt; para>张宇2018 - 07 - 06 - & lt;/para>///& lt;/summary>
  (CanEditMultipleObjects)
  [CustomEditor typeof (CameraCapture)))
  公共类CameraCaptureEditor:编辑{
  
  公共覆盖空白>看完上述内容,是不是对统一实现相机截图功能的方法有进一步的了解,如果还想学习更多内容,欢迎关注行业资讯频道。

团结实现相机截图功能的方法