unity 截屏记录


/// <summary>

	/// 使用Application类下的CaptureScreenshot()方法实现截图

	/// 优点:简单,可以快速地截取某一帧的画面、全屏截图

	/// 缺点:不能针对摄像机截图,无法进行局部截图

	/// </summary>

	/// <param name="mFileName">M file name.</param>

	private void CaptureByUnity(string mFileName)

	{

		Application.CaptureScreenshot(mFileName,0);

	}

 

	/// <summary>

	/// 根据一个Rect类型来截取指定范围的屏幕

	/// 左下角为(0,0)

	/// </summary>

	/// <param name="mRect">M rect.</param>

	/// <param name="mFileName">M file name.</param>

	private IEnumerator CaptureByRect(Rect mRect,string mFileName)

	{

		//等待渲染线程结束

		yield return new WaitForEndOfFrame();

		//初始化Texture2D

		Texture2D mTexture=new Texture2D((int)mRect.width,(int)mRect.height,TextureFormat.RGB24,false);

		//读取屏幕像素信息并存储为纹理数据

		mTexture.ReadPixels(mRect,0,0);

		//应用

		mTexture.Apply();

		

		

		//将图片信息编码为字节信息

		byte[] bytes = mTexture.EncodeToPNG();  

		//保存

		System.IO.File.WriteAllBytes(mFileName, bytes);

		

		//如果需要可以返回截图

		//return mTexture;

	}

 

	private IEnumerator  CaptureByCamera(Camera mCamera,Rect mRect,string mFileName)

	{

		//等待渲染线程结束

		yield return new WaitForEndOfFrame();

 

		//初始化RenderTexture

		RenderTexture mRender=new RenderTexture((int)mRect.width,(int)mRect.height,0);

		//设置相机的渲染目标

		mCamera.targetTexture=mRender;

		//开始渲染

		mCamera.Render();

		

		//激活渲染贴图读取信息

		RenderTexture.active=mRender;

		

		Texture2D mTexture=new Texture2D((int)mRect.width,(int)mRect.height,TextureFormat.RGB24,false);

		//读取屏幕像素信息并存储为纹理数据

		mTexture.ReadPixels(mRect,0,0);

		//应用

		mTexture.Apply();

		

		//释放相机,销毁渲染贴图

		mCamera.targetTexture = null;   

		RenderTexture.active = null; 

		GameObject.Destroy(mRender);  

		

		//将图片信息编码为字节信息

		byte[] bytes = mTexture.EncodeToPNG();  

		//保存

		System.IO.File.WriteAllBytes(mFileName,bytes);

		

		//如果需要可以返回截图

		//return mTexture;

	}

 

}

 

 

 


//定义图片保存路径

	private string mPath1;

	private string mPath2;

	private string mPath3;

 

	//相机

	public Transform CameraTrans;

 

	void Start()

	{

		//初始化路径

		mPath1=Application.dataPath+"\\ScreenShot\\ScreenShot1.png";

		mPath2=Application.dataPath+"\\ScreenShot\\ScreenShot2.png";

		mPath3=Application.dataPath+"\\ScreenShot\\ScreenShot3.png";

	}

 

	//主方法,使用UGUI实现

	void OnGUI()

	{

		if(GUILayout.Button("截图方式1",GUILayout.Height(30))){

			CaptureByUnity(mPath1);

		}

		if(GUILayout.Button("截图方式2",GUILayout.Height(30))){

			StartCoroutine(CaptureByRect(new Rect(0,0,1024,768),mPath2));

		}

		if(GUILayout.Button("截图方式3",GUILayout.Height(30))){

			//启用顶视图相机

			CameraTrans.camera.enabled=true;

			//禁用主相机

			Camera.main.enabled=false;

			StartCoroutine(CaptureByCamera(CameraTrans.camera,new Rect(0,0,1024,768),mPath3));

		}

	}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值