Unity使用RenderTexture进行截屏(海报截图分享、适配各种尺寸比例的屏幕)
发布日期:2021-06-30 19:38:16
浏览次数:2
分类:技术文章
本文共 1975 字,大约阅读时间需要 6 分钟。
Unity截屏分享功能,需要实现截屏功能。
美术那边会出一张海报图,尺寸为1280x720,包装成预设,预设上还有叠加一些其他UI,比如头像、昵称、二维码、宣传语、logo等等。
如果把海报图铺满全屏,那么如果手机屏幕宽高比不是1280:720,那么海报图就会被拉伸变形,如果等比例缩放海报图,那海报图就会有部分超出屏幕外,无法被截屏到。
解决办法:
海报图示例化后不缩放不拉伸,如果是在1280:720的宽高比的手机上,就刚好铺满全屏,如果是其他宽高比的屏幕,则海报图四周有可能会有留空,没有铺满全屏。没关系,截屏的时候,只读取海报图所在的像素位置即可,这里需要进行一些换算,具体看下面代码的region 2的部分的逻辑
public void cutScreen(){ RenderTexture rt = new RenderTexture(Screen.width, Screen.height, 24); // 赋值各个摄像机的targetTexture,注意摄像机的渲染顺序 // m_mainCam、m_auxCam、m_nguiCam是我这边定义的三个摄像机 m_mainCam.targetTexture = rt; m_mainCam.Render(); m_auxCam.targetTexture = rt; m_auxCam.Render(); m_nguiCam.targetTexture = rt; m_nguiCam.Render(); RenderTexture.active = rt; #region 1 // 全屏读取像素 //Texture2D tex = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false); //tex.ReadPixels(new Rect(0,0,Screen.width,Screen.height),0,0); #endretion 1 #region 2 // 读取1280x720宽高比的像素,适用于1280x720宽高比的海报截屏分享 float factor_x = Screen.width * 1.0f / Screen.height/ (1280 * 1.0f / 720); factor_x = factor_x < 1.0f ? 1.0f : factor_x; float factor_y = 1280 * 1.0f / 720 / (Screen.width * 1.0f / Screen.height); factor_y = factor_y < 1.0f ? 1.0f : factor_y; Texture2D tex = new Texture2D((int)(width / factor_x), (int)(height / factor_y), TextureFormat.RGB24, false); tex.ReadPixels(new Rect((width - width / factor_x) / 2, (height - height / factor_y) / 2f, width / factor_x, height / factor_y), 0, 0); #endregion 2 tex.Apply(); RenderTexture.active = null; m_mainCam.targetTexture = null; m_auxCam.targetTexture = null; m_nguiCam.targetTexture = null; Destroy(rt); GameObject photo = new GameObject("photo"); UITexture uiTex = photo.AddComponent(); uiTex .mainTexture = tex; photo.transform.parent = m_gamePanel.transform; photo.transform.localPosition = new Vector3(); photo.transform.localScale = Vector3.one; uiTex.width = 611; uiTex.height = 344;}
转载地址:https://linxinfa.blog.csdn.net/article/details/49493775 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2024年04月07日 16时15分54秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
基于java的SSM框架理财管理系统的设计与实现
2019-04-30
基于java的ssm框架就业信息管理系统的设计
2019-04-30
基于java的ssm框架的旅游网站设计与实现
2019-04-30
基于java的SSM框架的流浪猫救助网站的设计与实现
2019-04-30
基于java的SSM框架的教务关系系统的设计与实现
2019-04-30
别再问我什么是A/B测试了!
2019-04-30
如何用同期群分析模型提升留存?(Tableau实战)
2019-04-30
爱了,吹爆这个高颜值的流程图工具!
2019-04-30
一个数据项目
2019-04-30
基于JAVA_JSP电子书下载系统
2019-04-30
基于java出租车计价器设计与实现
2019-04-30
基于java的B2C的网上拍卖系统
2019-04-30
十二时辰篇:这该死的 996
2019-04-30
2021最新 上海互联网公司排名
2019-04-30
字节vs快手!取消大小周之战
2019-04-30
送一个闲置显示器!
2019-04-30
Oracle 行转列 pivot函数基本用法
2019-04-30
Oracle字符串分隔符替换(替换奇数个或偶数个)
2019-04-30
Oracle 利用 UTL_SMTP 包发送邮件
2019-04-30
Oracle 自定义函数实现split功能,支持超长字符串和clob类型的分隔
2019-04-30