最近在做项目中遇到一个需求,需要将物体模型进行透明虚化效果。看了网上一些博客文章。已实现该需求,为此博主写篇文章记录一下该功能的实现操作。希望能帮助到大家,不足之处还望海涵。一起学习交流。

透明效果:

使用一个方块来进行操作。


实现的脚本
该脚本挂在物体父级上,因为获取的是该对象所有子物体的MeshRenderer。(改脚本主要是获取需要透明的所有MeshRenderer然后进行更改操作)
主要操作在于这YPTools.SetMaterialRenderingMode(mrs[j],YPTools.RenderingMode.Transparent);
mrs[j].color = new Color(mrs[j].color.r, mrs[j].color.b, mrs[j].color.g, 0.1f);

public class EmptyControl : MonoBehaviour{private void Awake(){for (int i = 0; i < this.transform.childCount; i++){Transform wallTransform = this.transform.GetChild(i);MeshRenderer mr = wallTransform.GetComponent<MeshRenderer>();if (mr !=null){//MeshRenderer[] mr = wallTransform.gameObject.GetComponentsInChildren<MeshRenderer>();           Material[] mrs = mr.materials;for (int j = 0; j < mrs.Length; j++){Color mcolor = mrs[j].color;if (mcolor != null){//mcolor.a = 0.4f;mrs[j].color = new Color(65/255f,65/255f,65/255f,85/255f);//设置材质球颜色为灰色,方便透明时不那么明亮// 设置材质的颜色为半透明的颜色才能看到效果,如果材质有贴图,那么贴图也必须是半透明的YPTools.SetMaterialRenderingMode(mrs[j], YPTools.RenderingMode.Transparent);mrs[j].color = new Color(mrs[j].color.r, mrs[j].color.b, mrs[j].color.g, 0.1f);//wallTransform.gameObject.GetComponent<Renderer>().material.color = mcolor;}}}                  }}
}

YPTools工具类

public class YPTools : MonoBehaviour
{/// <summary>/// 设置Rendering Mode/// </summary>/// <param name="material"></param>/// <param name="renderingMode"></param>public static void SetMaterialRenderingMode(Material material, RenderingMode renderingMode){switch (renderingMode){case RenderingMode.Opaque:material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero);material.SetInt("_ZWrite", 1);material.DisableKeyword("_ALPHATEST_ON");material.DisableKeyword("_ALPHABLEND_ON");material.DisableKeyword("_ALPHAPREMULTIPLY_ON");material.renderQueue = 2000;break;case RenderingMode.Cutout:material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero);material.SetInt("_ZWrite", 1);material.EnableKeyword("_ALPHATEST_ON");material.DisableKeyword("_ALPHABLEND_ON");material.DisableKeyword("_ALPHAPREMULTIPLY_ON");material.renderQueue = 2450;break;case RenderingMode.Fade:material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha);material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);material.SetInt("_ZWrite", 0);material.DisableKeyword("_ALPHATEST_ON");material.EnableKeyword("_ALPHABLEND_ON");material.DisableKeyword("_ALPHAPREMULTIPLY_ON");material.renderQueue = 3000;break;case RenderingMode.Transparent:material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);material.SetInt("_ZWrite", 0);material.DisableKeyword("_ALPHATEST_ON");material.DisableKeyword("_ALPHABLEND_ON");material.EnableKeyword("_ALPHAPREMULTIPLY_ON");material.renderQueue = 3000;break;}}}public enum RenderingMode{Opaque,Cutout,Fade,Transparent,}

RenderingMode枚举对应材质这四种类型(更改类型为Transparent设置参数为0.1f就可以实现透明效果)

不透明效果:

YPTools.SetMaterialRenderingMode(mrs[j],YPTools.RenderingMode.Transparent);
mrs[j].color = new Color(mrs[j].color.r, mrs[j].color.b, mrs[j].color.g, 0.1f);

将上面Transparent更改为Opaque 然后在设置Material 材质颜色的a值为1

YPTools.SetMaterialRenderingMode(mrs[j],YPTools.RenderingMode.Opaque);
mrs[j].color = new Color(mrs[j].color.r, mrs[j].color.b, mrs[j].color.g, 1f);

以上就是Unity对3D物体透明和不透明实现操作学习总结,也希望能帮助到大家。^ _ ^

Unity 3D物体模型的透明和不透明实现相关推荐

  1. [Unity]3D物体透明化方法透明材质球

    Default-Skybox,Shader:Skybox/Procedural 使用透明材质 1.使用自带的天空盒材质 新建3D物体,自带是初始材质 将其替换成如上图所示的Default-Skybox ...

  2. [Vuforia] 详解·高通Vuforia识别追踪3D物体/模型,Unity开发

    前期硬件准备工作: 1.安卓机一台 2.电脑.软件就不说了 3.安卓机扫描3D物体的Scanner工具包下载:https://developer.vuforia.com/downloads/tool ...

  3. unity 3D物体添加 点击事件

    方法一:物体 挂在 EventTrigger  选择 PointerClick  注册响应方法 相机 必须挂在 PhysicsRaycaster 场景中必须有:EventSystem(一般创建UI自动 ...

  4. unity 3d物体显示和2dUI显示相结合

    1 利用摄像机深度 2 利用rendertexture 将3d物体渲染到texture上面

  5. unity 3d物体描边效果_从零开始的卡通渲染描边篇

    序言: 一直对卡通渲染非常感兴趣,前后翻找了不少的文档,做了一些工作.前段时间<从零开始>的手游上线了,试着渲染了一下的其中模型,觉得效果很不错.打算写一个专栏记录其中的渲染技术.在后面的 ...

  6. Unity 3D入门——模型展示

    unity版本 unity2018或unity2019 Unity相关网站 1.Unity官方文档,Unity中国官网,有中文文档 https://unity.cn/ 2.Unity的资源商店,有很多 ...

  7. Unity 3D模型展示之UI布局

    整体布局情况 导入UI资源并统一将Texture Type设置为Sprite(2D and UI) 1.标题 将Text中的文本设置为'Unity 3D物体展示实例'. 添加Shadow与Outlin ...

  8. Unity3D入门:3D物体和操作

    3D原生物体 3D原生物体的种类 Unity自带的3D物体模型:立方体Cube.球体Sphere.胶囊体Capsule.圆柱体Cylinder.平面Plane.四边形Quad 平面Plane和四边形Q ...

  9. Vuforia(高通)识别3D物体

    Vuforia(高通)识别3D物体 使用Vuforia + Unity 实现3D物体的识别 Vuforia 3d Object识别 详解·高通Vuforia识别追踪3D物体/模型,Unity开发 FR ...

最新文章

  1. zookeeper在搭建的时候,解决后台启动为standalone模式问题
  2. Extjs关于alert显示不出—异步问题
  3. workerman-chat(PHP开发的基于Websocket协议的聊天室框架)(thinkphp也是支持socket聊天的)...
  4. 关于Virtual-Hosting的理解
  5. php 分析css,全面分析css属性选择器
  6. python字典弱引用_如何使用弱引用优化 Python 程序的内存占用?
  7. 为什么说没有物联网,就没有 AI ?
  8. cf修改游戏客户端是什么意思_cf游戏客户端是什么
  9. word20161219
  10. uni-app在h5端和app端的使用。/deep/ css兼容性问题如何解决?
  11. wincc怎么c语言编程,WINCC几个常用C语言编程
  12. Vue和Springboot实现SM4加密和解密(前端可加密,后端可加解密,MD5同理)
  13. python gdal 读取图层及EPSG
  14. 景观设计名字主题_园林景观好听的名字
  15. 2020年11月软考网络规划设计师上午真题及答案解析
  16. 【目标检测论文解读复现NO.20】基于改进Yolov5的地铁隧道附属设施与衬砌表观病害检测方法
  17. Java常用基础知识点总结(最全)
  18. python的turtle库认识和学习(3)之窗体大小和位置
  19. Windows内核安全与驱动编程学习笔记----1.WDK安装
  20. VMware Fusion自动调整分辨率的问题

热门文章

  1. html2canvas截图 图片另存并解决图片模糊问题
  2. 稻草熊娱乐股价再创新低:年内累计跌幅达80%,赵丽颖曾是其股东
  3. Fledermaus和Surfer合作处理离散和格网数据
  4. 画画不好的人手残患者有救了!
  5. 优思学院|六西格玛可以直接考黑带吗?
  6. macOSLinux设置JDK版本
  7. mysql创建用户、数据库并授权
  8. DataPipeline携手兆芯进一步完善基础软硬件生态
  9. 【面经】2023年软件测试面试题大全(持续更新)附答案
  10. 李咏去世引发的一些感想