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]Unity3D游戏开发之截屏保存精彩瞬间

各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei。今天我们来做点简单的东西,做个什么呢?答案就是截屏。作为一名热爱单机游戏的玩家,博主...
  • qinyuanpei
  • qinyuanpei
  • 2014年09月10日 20:28
  • 13936

Unity3d之截图方法

原文地址 下面是我总结的、在u3d中的,三种截屏方法: 1、使用Application类下的CaptureScreenshot方法。 [csharp] v...
  • u010270148
  • u010270148
  • 2016年09月13日 10:30
  • 252

Unity3d之截图方法

下面是我总结的、在u3d中的,三种截屏方法: 1、使用Application类下的CaptureScreenshot方法。 [csharp] view plaincopy v...
  • bianchengxiaosheng
  • bianchengxiaosheng
  • 2015年10月31日 14:16
  • 1210

unity 针对相机视角截屏并保存

挂在相机上,设置组件属性: Clear Flags 为: Depth only/Solid Color/Don’t Clearusing UnityEngine; using System.Colle...
  • u012487582
  • u012487582
  • 2017年04月01日 10:32
  • 1277

vc++指定区域截屏

int CCaptureDeskDlg::SaveBitmapToFile(HBITMAP hBitmap, LPCWSTR lpFileName) //hBitmap 为刚才...
  • lcalqf
  • lcalqf
  • 2016年09月10日 13:49
  • 554

IOS开发-几种截屏方法

1.         UIGraphicsBeginImageContextWithOptions(pageView.page.bounds.size, YES, zoomScale);     ...
  • super_man_ww
  • super_man_ww
  • 2016年10月09日 15:44
  • 876

Unity3d之截图方法

Unity3d之截图方法 分类: Unity3D2013-11-28 17:13 1014人阅读 评论(2) 收藏 举报 AnYuanLzhunityunity3d截屏 下面是我总结的、...
  • Highning0007
  • Highning0007
  • 2014年07月20日 14:11
  • 43050

Unity3d截图 指定相机截图

文章中主要参考了 http://blog.csdn.net/anyuanlzh/article/details/17008909; 对其中还有 一些疑惑:就是 如果相机有天空盒 就无法截取到3D物体 ...
  • ldy597321444
  • ldy597321444
  • 2016年05月17日 15:09
  • 2085

iOS开发:多种截屏方式

原文链接:http://www.cocoachina.com/ios/20141222/10713.html 第一种 这是iOS 3时代开始就被使用的方法,它被废止于iOS 7...
  • jijiji000111
  • jijiji000111
  • 2016年10月15日 16:55
  • 980

Unity 截屏 录屏 并且保存到 iOS相册

1. 先在Untiy中 建一个新的script 用来截屏 录屏后的地址 发送到iOS using UnityEngine; using System.Runtime.InteropServices; ...
  • chuan403082010
  • chuan403082010
  • 2017年05月14日 15:39
  • 1367
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Unity3D -- 自定义范围截屏
举报原因:
原因补充:

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