Unity 3D物体模型的透明和不透明实现
最近在做项目中遇到一个需求,需要将物体模型进行透明虚化效果。看了网上一些博客文章。已实现该需求,为此博主写篇文章记录一下该功能的实现操作。希望能帮助到大家,不足之处还望海涵。一起学习交流。
透明效果:
使用一个方块来进行操作。
实现的脚本
该脚本挂在物体父级上,因为获取的是该对象所有子物体的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物体模型的透明和不透明实现相关推荐
- [Unity]3D物体透明化方法透明材质球
Default-Skybox,Shader:Skybox/Procedural 使用透明材质 1.使用自带的天空盒材质 新建3D物体,自带是初始材质 将其替换成如上图所示的Default-Skybox ...
- [Vuforia] 详解·高通Vuforia识别追踪3D物体/模型,Unity开发
前期硬件准备工作: 1.安卓机一台 2.电脑.软件就不说了 3.安卓机扫描3D物体的Scanner工具包下载:https://developer.vuforia.com/downloads/tool ...
- unity 3D物体添加 点击事件
方法一:物体 挂在 EventTrigger 选择 PointerClick 注册响应方法 相机 必须挂在 PhysicsRaycaster 场景中必须有:EventSystem(一般创建UI自动 ...
- unity 3d物体显示和2dUI显示相结合
1 利用摄像机深度 2 利用rendertexture 将3d物体渲染到texture上面
- unity 3d物体描边效果_从零开始的卡通渲染描边篇
序言: 一直对卡通渲染非常感兴趣,前后翻找了不少的文档,做了一些工作.前段时间<从零开始>的手游上线了,试着渲染了一下的其中模型,觉得效果很不错.打算写一个专栏记录其中的渲染技术.在后面的 ...
- Unity 3D入门——模型展示
unity版本 unity2018或unity2019 Unity相关网站 1.Unity官方文档,Unity中国官网,有中文文档 https://unity.cn/ 2.Unity的资源商店,有很多 ...
- Unity 3D模型展示之UI布局
整体布局情况 导入UI资源并统一将Texture Type设置为Sprite(2D and UI) 1.标题 将Text中的文本设置为'Unity 3D物体展示实例'. 添加Shadow与Outlin ...
- Unity3D入门:3D物体和操作
3D原生物体 3D原生物体的种类 Unity自带的3D物体模型:立方体Cube.球体Sphere.胶囊体Capsule.圆柱体Cylinder.平面Plane.四边形Quad 平面Plane和四边形Q ...
- Vuforia(高通)识别3D物体
Vuforia(高通)识别3D物体 使用Vuforia + Unity 实现3D物体的识别 Vuforia 3d Object识别 详解·高通Vuforia识别追踪3D物体/模型,Unity开发 FR ...
最新文章
- zookeeper在搭建的时候,解决后台启动为standalone模式问题
- Extjs关于alert显示不出—异步问题
- workerman-chat(PHP开发的基于Websocket协议的聊天室框架)(thinkphp也是支持socket聊天的)...
- 关于Virtual-Hosting的理解
- php 分析css,全面分析css属性选择器
- python字典弱引用_如何使用弱引用优化 Python 程序的内存占用?
- 为什么说没有物联网,就没有 AI ?
- cf修改游戏客户端是什么意思_cf游戏客户端是什么
- word20161219
- uni-app在h5端和app端的使用。/deep/ css兼容性问题如何解决?
- wincc怎么c语言编程,WINCC几个常用C语言编程
- Vue和Springboot实现SM4加密和解密(前端可加密,后端可加解密,MD5同理)
- python gdal 读取图层及EPSG
- 景观设计名字主题_园林景观好听的名字
- 2020年11月软考网络规划设计师上午真题及答案解析
- 【目标检测论文解读复现NO.20】基于改进Yolov5的地铁隧道附属设施与衬砌表观病害检测方法
- Java常用基础知识点总结(最全)
- python的turtle库认识和学习(3)之窗体大小和位置
- Windows内核安全与驱动编程学习笔记----1.WDK安装
- VMware Fusion自动调整分辨率的问题