Unity游戏开发之“屏幕截图”
2014-02-14 15:46
267 查看
在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图
}
有兴趣的朋友可以试试这两种截图方法的性能和可用性。
上面的方法只能截屏整个屏幕,但是我们想要截取某一部分,比如除去UI层的截图。但是我们怎么样才能做到分层截屏呢。我现在的想法是通过摄像机的RenderTexture来实现分层截图,但是目前阶段还没有实现。如果有兴趣的朋友或者有更好方法的朋友可以加群Unity开发学习交流QQ群:3112035
———— 麦兜
http://sygame.lofter.com/post/117105_791680
方法一:在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图
}
有兴趣的朋友可以试试这两种截图方法的性能和可用性。
上面的方法只能截屏整个屏幕,但是我们想要截取某一部分,比如除去UI层的截图。但是我们怎么样才能做到分层截屏呢。我现在的想法是通过摄像机的RenderTexture来实现分层截图,但是目前阶段还没有实现。如果有兴趣的朋友或者有更好方法的朋友可以加群Unity开发学习交流QQ群:3112035
———— 麦兜
http://sygame.lofter.com/post/117105_791680
相关文章推荐
- Unity游戏开发中屏幕截图的方法
- Unity游戏开发之“屏幕截图”
- Unity游戏开发之“屏幕截图”
- Unity游戏开发之“屏幕截图”
- Unity游戏开发之“屏幕截图
- 【绝对原创】Unity开发 NGUI如何使游戏屏幕 自适应
- Unity开发安卓游戏:1.实现移动设备屏幕自适应
- 干货:Unity游戏开发图片纹理压缩方案
- Unity开发IOS游戏的优化建议
- unity 5.x游戏开发指南——第一二三章
- VB6.0 基于ewededitor4.8商业版扩展功能——屏幕截图自动保存功能开发笔记
- anrdroid+unity游戏开发之c#一些常用“方法”
- SpriteKit游戏开发点滴(3) 屏幕大小模式
- Unity中国技术总监刘钢:如何优化基于Unity开发的3D移动游戏
- Unity和Cocos2D在2D游戏开发上的对比
- [Unity游戏开发]常用类之Time类
- unity游戏开发 发布android 游戏 (一)
- Unity 5.x 游戏开发指南 HD版 final.pdf
- unity3D游戏开发二之unity编辑器一
- 干货:Unity游戏开发图片纹理压缩方案