当前位置: 首页 > news >正文

两学一做知识竞答网站b站免费建网站

两学一做知识竞答网站,b站免费建网站,西安房产网,海南网站建设介绍一个需求 我需要在场景中截取不同层级的截图(如只截模型或只截UI或只截外部相加看到的画面 或全都截或和Shader配合呈现人眼夜视仪热成像的画面切换) 将截图排到列表中,在场景UI中展示出来 如何做 相机要能够看到不同的画面 将当前帧画面存储下来 将存储的画面展示出…

一个需求

我需要在场景中截取不同层级的截图(如只截模型或只截UI或只截外部相加看到的画面 或全都截或和Shader配合呈现人眼夜视仪热成像的画面切换)
将截图排到列表中,在场景UI中展示出来

如何做

  1. 相机要能够看到不同的画面
  2. 将当前帧画面存储下来
  3. 将存储的画面展示出来

实现时需要掌握的知识点

相机要能够看到不同的画面

  1. 将不同的游戏对象分类成不同的Layer
  2. 需要单独设置一个相机x与原相机保持一致,唯独更改它的Rendering->CullingMask 规定它可以看什么不看什么,还有Rendering->Priority层级要高于原相机 (还要关闭它的AudioListener,防止重复)
  3. 通常我们要关掉,只在截图的时候打开它
动态控制摄像机Rendering->CullingMask的方法
    
publicCameracameraToChange;//控制的相机publicLayerMasknewCullingLayers;//选择LayersvoidSetCullingMask(){//显示选择的LayerscameraToChange.cullingMask =newCullingLayers;}voidToggleCullingMask(){// 取反剔除层cameraToChange.cullingMask =~cameraToChange.cullingMask;}voidDisableAllLayers(){//全部剔除cameraToChange.cullingMask =0;}

将画面存储下来

需要输入宽度和高度用于创建Texture2D和截图内容用,有两种方式意思直接输入屏幕存储或创建一个image,常用这个image宽高
    
intwidth =Screen.width;intheight =Screen.height;publicRectTransformUIRect;{//计算截图的宽度和高度intwidth =(int)(UIRect.rect.width);intheight =(int)(UIRect.rect.height);//创建一个新的Texture2D对象,宽度和高度与截图的宽度和高度匹配Texture2Dtex =newTexture2D(width,height,TextureFormat.RGB24,false);}
储存方法
事先要创建出StreamingAssets文件夹
    
publicRectTransformUIRect;publicRawImagerawImage;// 添加一个RawImage对象voidUpdate(){if(Input.GetKeyDown(KeyCode.Q)){stringfileName =Application.dataPath +"/StreamingAssets/"+"12.png";//系统不识别标点符号,但支持中文IEnumeratorcoroutine =CaptureByUI(UIRect,fileName);StartCoroutine(coroutine);}}publicIEnumeratorCaptureByUI(RectTransformUIRect,stringmFileName){yieldreturnnewWaitForEndOfFrame();//等待当前帧的UI渲染完成//计算截图的宽度和高度intwidth =(int)(UIRect.rect.width);intheight =(int)(UIRect.rect.height);//创建一个新的Texture2D对象,宽度和高度与截图的宽度和高度匹配Texture2Dtex =newTexture2D(width,height,TextureFormat.RGB24,false);//计算从屏幕上读取像素的起始位置floatleftBtmX =UIRect.transform.position.x +UIRect.rect.xMin;floatleftBtmY =UIRect.transform.position.y +UIRect.rect.yMin;//使用tex.ReadPixels()函数从屏幕上读取指定区域的像素,并存储到Texture2D中。tex.ReadPixels(newRect(leftBtmX,leftBtmY,width,height),0,0);//执行读取操作,将修改应用到Texture2D中tex.Apply();//将Texture2D编码为PNG格式的字节数组byte[]bytes =tex.EncodeToPNG();//将字节数组保存为PNG图片文件System.IO.File.WriteAllBytes(mFileName,bytes);}

将存储的画面展示出来

到UnityWebRequest 从给的路径里拿数据
    
publicRawImagerawImage;publicstringimageFileName;voidUpdate(){if(Input.GetKeyDown(KeyCode.W)){// 拼接图片路径stringimagePath =System.IO.Path.Combine(Application.streamingAssetsPath,imageFileName);// 开始协程加载图片StartCoroutine(LoadImage(imagePath));}}IEnumeratorLoadImage(stringpath){// 发送请求获取图片UnityWebRequestwww =UnityWebRequestTexture.GetTexture(path);yieldreturnwww.SendWebRequest();// 检查请求是否成功if(www.result ==UnityWebRequest.Result.Success){// 获取加载的TextureTexture2Dtexture =DownloadHandlerTexture.GetContent(www);// 将加载的Texture赋值给RawImage的texture属性rawImage.texture =texture;// 调整RawImage的大小以适应图片的长宽比例rawImage.SetNativeSize();}else{Debug.LogError("Failed to load image: "+www.error);}}
http://www.zhongyajixie.com/news/61530.html

相关文章:

  • 建设购物网站论文什么是百度快照
  • wordpress视频列表模板株洲seo优化
  • 如何建设网站24小时接单培训机构连锁加盟
  • 有服务器和域名怎么做网站百度关键词推广2元一天
  • 专门做物业催收的网站可以访问境外的浏览器
  • 做 直销网站 公司吗新闻摘抄四年级下册
  • 影院禁止18岁以下观众观影搜索引擎优化的核心及内容
  • 帝国做企业网站汕头seo公司
  • 深圳个人网站建设搜索引擎优化效果
  • 做投票的网站百度竞价推广收费标准
  • 2017年做那个网站致富浙江seo外包费用
  • 学做网站php成都百度推广公司电话
  • 网站源码是什么意思企业培训内容包括哪些内容
  • 网站建设全包 广州深圳谷歌seo推广
  • 网站后台密码如何破解悟空建站seo服务
  • 搜了网南昌网站优化公司
  • 企划做网站中国站长
  • 建筑设计公司名字上海百度搜索优化
  • 网站个性化搜索引擎优化网页
  • 潍坊网站做的好的公司苹果aso优化
  • 苏州市网站制作游戏推广员是做什么的
  • wordpress直接上传视频网站王通seo教程
  • aspcms网站栏目调用客服系统网页源码2022免费
  • 做网站用windows还是mac最新新闻热点事件及评论
  • wordpress 主机 设置ftp推广优化网站排名教程
  • c 网站开发项目教程站长之家源码
  • 刚刚地震最新消息今天2022seo广告
  • 竞价网站做不做链接如何打百度人工电话
  • 网站建设 500强建站网站优化服务
  • 怎么做网站的外部连接seo网站优化培训价格