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

透明效果:

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


实现的脚本
该脚本挂在物体父级上,因为获取的是该对象所有子物体的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. go channel 缓冲区最大限制_GO语言圣经学习笔记(八)Goroutines和Channels
  2. 联想服务器 重装系统u盘启动,联想_Lenovo BIOS Setup Utility 设置U盘启动教程
  3. 灰度图像阈值化分割常见方法总结及VC实现
  4. Linux 网络配置命令:ip、ss
  5. Java黑皮书课后题第4章:*4.3(几何:估算面积)应用4.1节图中以下地点的GPS位置:Georgia州的Atlanta……计算被这四个城市所围起来的区域面积
  6. python3 案例分享--Jupyter Notebook Demo
  7. session很快失效_一口气说出 4 种分布式一致性 Session 实现方式,面试杠杠的~
  8. 轻量级OLAP(一):Cube计算
  9. 计算机硬盘驱动器越大,计算机基础知识1.3摘要.doc
  10. 公务员“上班睡觉”为何会被强势围观?
  11. 开源公司黄页之阿里巴巴开源软件推荐(二)
  12. 23种常见设计模式详解
  13. 《SQL 入门教程》示例数据库
  14. python 多态app_Python——多态
  15. git配置管理生成多个ssh的key
  16. 惠普战66二代 amd 处理器耳机插入后没声音的问题解决
  17. 微软工业计算机主机怎么样,炸裂!设计师们,微软喊你们换电脑了
  18. Anders Hejlsberg
  19. ubuntu14.04安装gnu/emacs24
  20. c语言写合泰单片机eeprom,合泰单片机EEPROM编程实例

热门文章

  1. html鼠标滑动显示内容,CSS DIV 怎样做出来鼠标移动上就显示其内容?
  2. m 555lu vip php,苹果cms开启vip会员收费权限教程
  3. 数据分析只有和业务挂钩才能产生真正驱动力
  4. 浅谈HTML5+css3新标签和特性
  5. signature=b03eb981ac8d43a4fcc09cd9a770d7ee,B03.300 [Categoria DeCS]
  6. MATLAB中plot函数如何在实线上加点
  7. 入驻亚马逊你该知道这些!—跨海汇
  8. DataCastle“卧龙大数据 微博热度预测竞赛”,用微博数据实时预测微博传播
  9. 重庆大学校友会计算机,校友会-重庆大学
  10. 携程网宕机事故深度剖析