Unity 截屏

在unity游戏开发中,可能会遇到在游戏中截屏的效果。这儿提供两种截屏方法。(方法二提供显示截图缩略图代码)

方法一:在unity的API中,unity给我们提供了一个现成的API  :  Application.CaptureScreenshot(imagename)。但是这个API虽然简单,在PC、mac运用没有多大的影响,但是如果是在移动平台上使用的话就显得相当的吃力,因为它会消耗我们很大的CUP,所以你在移动端使用它截屏的时候会发现很长一段的卡顿现象。但是不得不说使用起来非常的方便,但是在我们使用这个API截图后的截图存放在哪儿呢?很多新朋友可能不是很清楚,当然不同的平台它的存放路径是有差别的。下面是各个平台的截图存放路径:

             Application.CaptureScreenshot(screencapture.png)

            if(Application.platform==RuntimePlatform.Android || Application.platform==RuntimePlatform.IPhonePlayer)  

                 imagePath=Application.persistentDataPath;  

            else if(Application.platform==RuntimePlatform.WindowsPlayer)  

                 imagePath=Application.dataPath;  

           else if(Application.platform==RuntimePlatform.WindowsEditor)

            {  

                 imagePath=Application.dataPath;  

                 imagePath= imagePath.Replace("/Assets",null);  

             }   

            imagePath = imagePath + "/screencapture.png";

         如果你想要你的游戏中显示你截图的缩略图,那么这种方法不是一个好方法,因为你                要用 WWW去加载你刚才的截图,这会消耗你一部分的时间。 

 方法二:通过读取屏幕缓存然后转化为Png图片进行截图。(当然截图存储路径你可以自己设置) 

               IEnumerator GetCapture()

                {

                        yield return new WaitForEndOfFrame();

                        int width = Screen.width;

                        int height = Screen.height;

                        Texture2D tex = new Texture2D(width,height,TextureFormat.RGB24,false);

                        tex.ReadPixels(new Rect(0,0,width,height),0,0,true);

                        byte[] imagebytes = tex.EncodeToPNG();//转化为png图

                        tex.Compress(false);//对屏幕缓存进行压缩

                        image.mainTexture = tex;//对屏幕缓存进行显示(缩略图)

                        File.WriteAllBytes(Application.dataPath + "/screencapture.png",imagebytes);//存储png图

                }

unity API

贴代码:
using UnityEngine;
using System.Collections;
using System.IO;
using System;

public class CaptureImage : MonoBehaviour {

	// Use this for initialization
	void Start () {
		var rand = new System.Random ();
		var fileName = "自定义截屏文件"  + ".png";
		var savePath = Path.Combine (Application.dataPath+"/Screenshots/", fileName);
		StartCoroutine (getCaptureRoutine (savePath, () => {
			Debug.Log("截屏成功");
		}));
		//API
		getCaotureShot (rand.Next().ToString());
	}

	void getCaotureShot(string name){
		Application.CaptureScreenshot (Application.dataPath + "/Screenshots/Screenshot " + name + ".png");
	}
	
	IEnumerator getCaptureRoutine (string savePath, Action completion) {
		yield return new WaitForEndOfFrame ();

		int width = Screen.width;
		int height = Screen.height;

		Texture2D tex = new Texture2D (width, height, TextureFormat.RGB24, false);
		tex.ReadPixels (new Rect (0, 0, width, height), 0, 0, true);

		byte[] imagebytes = tex.EncodeToPNG ();//转化为png图
		tex.Compress (false);//对屏幕缓存进行压缩

		File.WriteAllBytes (savePath, imagebytes);//存储png图

		completion ();
	}
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值