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

武汉网站制作027外链兔

武汉网站制作027,外链兔,医学关键词 是哪个网站做,金乡网站建设一个需求 我需要在场景中截取不同层级的截图(如只截模型或只截UI或只截外部相加看到的画面 或全都截或和Shader配合呈现人眼夜视仪热成像的画面切换) 将截图排到列表中,在场景UI中展示出来 如何做 相机要能够看到不同的画面 将当前帧画面存储下来 将存储的画面展示出…

一个需求

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

如何做

  1. 相机要能够看到不同的画面
  2. 将当前帧画面存储下来
  3. 将存储的画面展示出来
知识点代码
https://developer.unity.cn/projects/64ca2cbbedbc2a00187ba6d6
下面继续

做一个练习 截屏细节 轮廓+UI 全部三张图分别展示出来

  1. 首先给游戏对象分好类
  1. 简单设计一下UI,截图功能会在此操作,截图会在此展示
三个相加分别是Main 场景的主相机,DesktopUI界面UI专门展示的相机, CamTexture专门用来截图操作的相机平时不打开,只在截图时候打开截这个相机渲染的画面
  1. CamTexture想要渲染不同的画面就要对他进行不同的设置
    
publicclassCtrlScreenShot:MonoBehaviour{//相机渲染[Header("可用渲染内容的相机")]publicCameracameraToChange;[Header("具体渲染的Layers")]publicLayerMaskCullingLayers0;publicLayerMaskCullingLayers1;publicLayerMaskCullingLayers2;// 照片存储的位置publicTransformPhotenRoot;//截图的大小模板(在场景中透明显示就行,为的就是截图时候按照这个UI的大小去截图)publicRectTransformUIRect;//LayerMaskCullingLayers;TransformphotenPos;stringphotenName;publicvoidCtrlScreenShotBtFc(intbutint){switch(butint){case0:CullingLayers =CullingLayers0;//相机渲染显示的LayersphotenPos =PhotenRoot.GetChild(0).transform;//截图显示的位置break;case1:CullingLayers =CullingLayers1;//相机渲染显示的LayersphotenPos =PhotenRoot.GetChild(1).transform;//截图显示的位置break;case2:CullingLayers =CullingLayers2;//相机渲染显示的LayersphotenPos =PhotenRoot.GetChild(2).transform;//截图显示的位置break;default:break;}StartCoroutine(StartScreenShot());}///IEnumeratorStartScreenShot(){cameraToChange.cullingMask =0;//全部剔除cameraToChange.cullingMask =CullingLayers;//显示选择的LayerscameraToChange.gameObject.SetActive(true);photenName =System.DateTime.Now.ToString("yyyyMMddHHmmss")+".png";//截图的名字stringfileName =Application.dataPath +"/StreamingAssets/"+photenName;//系统不识别标点符号,但支持中文yieldreturnStartCoroutine(CaptureByUI(UIRect,fileName));// 拼接图片路径stringimagePath =System.IO.Path.Combine(Application.streamingAssetsPath,photenName);// 开始协程加载图片yieldreturnStartCoroutine(LoadImage(imagePath,photenPos));cameraToChange.gameObject.SetActive(false);}/// <summary>/// 保存截图,并保存成png格式文件/// </summary>/// <param name="UIRect"></param>屏幕截图的大小尺寸规范 是个透明的imageUI/// <param name="mFileName"></param>将截图转换成的png文件保存的位置和命名/// <returns></returns>IEnumeratorCaptureByUI(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);}/// <summary>/// 将保存的png,根据名字在界面上相对位置展示出来/// </summary>/// <param name="path"></param>/// <returns></returns>IEnumeratorLoadImage(stringpath,TransformphotenPos){// 发送请求获取图片UnityWebRequestwww =UnityWebRequestTexture.GetTexture(path);yieldreturnwww.SendWebRequest();// 检查请求是否成功if(www.result ==UnityWebRequest.Result.Success){// 获取加载的TextureTexture2Dtexture =DownloadHandlerTexture.GetContent(www);//创建一个RawImage并放在其位置GameObjectuiObject =newGameObject();uiObject.transform.parent =photenPos.transform;RectTransformrectTransform =uiObject.AddComponent<RectTransform>();CanvasRenderercanvasRenderer =uiObject.AddComponent<CanvasRenderer>();RawImagerawImage =uiObject.AddComponent<RawImage>();// 将加载的Texture赋值给RawImage的texture属性rawImage.texture =texture;// 调整RawImage的大小以适应图片的长宽比例rawImage.SetNativeSize();// 获取父级图像的宽度floatparentWidth =rawImage.transform.parent.GetComponent<RectTransform>().rect.width;// 计算图像的长宽比floataspectRatio =(float)rawImage.texture.height /rawImage.texture.width;// 计算应用于图像的新高度floatnewHeight =parentWidth *aspectRatio;// 设置图像的宽度和高度rawImage.rectTransform.sizeDelta =newVector2(parentWidth,newHeight);// 将图像的位置设置为零rawImage.rectTransform.localPosition =Vector3.zero;// 将图像的缩放设置为1rawImage.rectTransform.localScale =Vector3.one;}else{Debug.LogError("Failed to load image: "+www.error);}}}
用这样的方式在AR里也可以实现拍照的功能 可以切换截取的是现实的或虚拟加现实的等
http://www.bjxfkj.com.cn/article/105890.html

相关文章:

  • 做加工都在哪个网站推广脑白金网络营销
  • 建设银行网站打印消费账单优化推广网站怎么做最好
  • 销售型网站建设基本要素营销公司网站
  • 弹窗广告最多的网站搜索引擎seo如何赚钱
  • 青岛做网站要多少钱百度云盘资源
  • 搜索引擎营销漏斗模型网站seo案例
  • 网站自适应北京seo顾问外包
  • 焦作百姓网免费发布信息seo排名优化的方法
  • 东城手机网站建设搜索技巧
  • 谷哇网站建设网络推广公司专业网络
  • 江西建设信息网站怎么在百度发帖
  • 济南住房和城乡建设部网站大数据精准营销
  • 做网站 哪里发布登封网站关键词优化软件
  • 重庆网站搭建方案广州今日刚刚发生的新闻
  • 网站基础上添加建设方案模板怎么推广app
  • 人事处网站开发文献综述网站推广郑州
  • 广西排名前十的模板厂爱站seo工具
  • 做么网站有黄seo人员是什么意思
  • 手机网站端域名怎样做解析总裁培训班
  • 网站的图片怎么更换目前最靠谱的推广平台
  • 东莞做网站 自媒体廊坊seo管理
  • 拟一份饰品网站建设合同营销策划的六个步骤
  • 房产网站排行榜郑州网站seo推广
  • 哪家网站做教育培训机构转让徐州网站建设
  • 怎么做交易网站打开浏览器直接进入网站
  • 做论文常用网站学会计哪个培训机构比较正规
  • 福州市建设工程招投标信息网搜索引擎优化文献
  • 网站是做推广好还是优化好网络营销的缺点及建议
  • 浏览wap网站印度疫情最新消息
  • 小程序公众号网站开发制作网页多少钱