Unity3D -- 自定义范围截屏

原创 2015年11月21日 11:55:56

大家都知道unity有一个截屏方法,调用Application.CaptureScreenshot("Screenshot.png")方法就可以截取一张图保存到Application.persistentDataPath + "/Screenshot.png",  但是如果你只是想截取屏幕固定部分的内容怎么办呢,而且那个固定部分还是使用程序动态算出来的,这个时候使用全屏截取就会有错误了。

Unity是可以实现截取固定位置屏幕的。

首先在UI下面建立一个面板,


基于父对象中心对齐,然后长宽自由设定,

在父对象中声明一个public RectTransform BackGround 变量,然后将上面设置的面板关联到BackGround。


程序运行是ShareUI设置面板大小

m_Height = Screen.height;
        m_Width = m_Height * m_Height / Screen.width;
        BackGround.sizeDelta = new Vector2 (m_Width, m_Height);

这个可以随意设置。

然后开始截屏了。下面是代码:

Rect m_Rect;

void Start()
{
        m_Height = Screen.height;
        m_Width = m_Height * m_Height / Screen.width;
        BackGround.sizeDelta = new Vector2 (m_Width, m_Height);
        m_Rect= new Rect();
        Vector3[] fourCornersArray = new Vector3[4];

        BackGround.GetWorldCorners (fourCornersArray);

        m_Rect.width = fourCornersArray [2].x - fourCornersArray [0].x;
        m_Rect.height = fourCornersArray [2].y - fourCornersArray [0].y;
        m_Scale = BackGround.sizeDelta.x / m_Rect.width;
        m_Rect.width = BackGround.sizeDelta.x;
        m_Rect.height = BackGround.sizeDelta.y;
        m_Rect.x = Screen.width * 0.5f - m_Rect.width / 2;
        m_Rect.y = Screen.height * 0.5f - m_Rect.height / 2;
}

IEnumerator Screenshot()
{
        yield return new WaitForEndOfFrame();
        BackGround.localScale = new Vector3 (m_Scale, m_Scale, m_Scale);
        Texture2D screenShot = new Texture2D((int)m_Rect.width, (int)m_Rect.height, TextureFormat.RGB24,false);  
        screenShot.ReadPixels(m_Rect, 0, 0);  
        screenShot.Apply();  
        byte[] bytes = screenShot.EncodeToPNG();  
        string filename = Application.persistentDataPath + "/Screenshot.png";  
        System.IO.File.WriteAllBytes(filename, bytes); 
        Invoke ("Share", 2f);
}

这样在需要截图的时候调用StartCoroutine (Screenshot());同样地就在Application.persistentDataPath + "/Screenshot.png";  路径下保存了一份截屏文件。分享时将这种图片分享就可以了。


——Rocky

版权声明:阳仔原创,转载请注明出处。

相关文章推荐

unity3d自定义按键

  • 2012-09-09 00:22
  • 1.56MB
  • 下载

[unity3d]自定义loading界面和浏览器的全屏显示

将做好的unity项目发布成web版本,打开后发现出现的是自定义的unity的loading界面,如果修改成我们自己的的logo图案和加载进度条。 操作步骤:                    ...

unity3D调用外接摄像头,保存图片、不使用截屏方式

首先感谢前辈使用截屏的方式调用外接摄像头并保存图片:http://blog.csdn.net/a112634313/article/details/8472786 Texture2D处理http://...

Unity3D 背景动态模糊(blur)和截屏方法

unity 提供了一个函数 OnRenderImage (RenderTexture source, RenderTexture destination) ,只要将这个组件挂载在Camera上面。就能...

【iOS-Cocos2d(2.x) 游戏开发之一】自定义CCSprite中-(id) init 重写需注意& 2.x版本中注册触屏事件代码&简述cocos2d/x/Unity3D引擎使用感想!

本站文章均为 李华明Himi 原创,转载务必在明显处注明:转载自【黑米GameDev街区】 原文链接: http://www.himigame.com/iphone-cocos2d-v2/736.ht...

Unity3D_打碎模型(自定义碎的程度)插件--Fracturing & Destruction 1.11

Unity3D_打碎模型(自定义碎的程度)插件--Fracturing & Destruction 1.11 亲测实用!!!

Unity3d 编写编辑器自定义插件(1)

Unity3D的运行时和编辑器类分别存储在不同的Assemblies里:UnityEngine和UnityEditor。由于编辑器插件是独立于游戏之外的,因此需要在assets文件夹下建立Editor...

Unity3D之Shader自定义编辑器功能拓展

一、前言   最近在开发一个关卡类的游戏,在导入一些3D物体的时候,发现很多时候同一个3D物体需要渲染的方式不一样,比如这颗树要双面渲染(Cull Off),但在很多情况下是可以剔除背面(Cul...

Unity3D-使用Bitmap Font Generator自定义字体

Bitmap Font Generator是一个开源免费软件,下载地址http://www.angelcode.com/products/bmfont/ 使用这个工具的过程中不要用中文目录 一、将...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)