unity 实现3d模型渐隐(修改材质透明度)
前言:看到此功能首先想到的是写shader,但是我对shader一知半解。网上找了几个大佬分享的做渐隐的shader也只是能实现渐隐而已,无法实现unity模型材质Standard的各种效果,我又不会修改Standard shader,所以只能退而求其次。
如有大佬明白如何用shader实现,烦请告知,感激不尽
下面说下我的实现方式:
由于模型材质Rendering Mode大都是Opaque,无法实现渐隐。
关于Rendering Mode,这里不做解释,不懂得转这里渲染模式 (Rendering Mode) - Unity 手册
实现思路:因为模型材质Rendering Mode模式不一样,所以要在做渐隐之前先将模型参数存起来,以便模型渐隐后可以复原。
模型参数存储很简单,我是用的字典。但是获取材质Rendering Mode以及修改材质Rendering Mode就比较冷门了。下面挂上代码实现方式
获取材质Rendering Mode:
// 获取材质的Rendering Modepublic RenderingFadeMode GetMaterialRenderingFadeMode(Material material){RenderingFadeMode rm = RenderingFadeMode.Opaque;int one = material.GetInt("_SrcBlend");int two = material.GetInt("_DstBlend");int three = material.GetInt("_ZWrite");bool oneKeyword = material.IsKeywordEnabled("_ALPHATEST_ON");bool twoKeyword = material.IsKeywordEnabled("_ALPHABLEND_ON");bool threeKeyword = material.IsKeywordEnabled("_ALPHAPREMULTIPLY_ON");if (one == 1 & two == 0 && three == 1 && oneKeyword == false && twoKeyword == false && threeKeyword == false)rm = RenderingFadeMode.Opaque;else if (one == 1 & two == 0 && three == 1 && oneKeyword == true && twoKeyword == false && threeKeyword == false)rm = RenderingFadeMode.Cutout;else if (one == 5 & two == 10 && three == 0 && oneKeyword == false && twoKeyword == true && threeKeyword == false)rm = RenderingFadeMode.Fade;else if (one == 1 & two == 10 && three == 0 && oneKeyword == false && twoKeyword == false && threeKeyword == true)rm = RenderingFadeMode.Transparent;return rm;}
修改材质Rendering Mode:
// 设置材质的Rendering Modepublic void SetMaterialRenderingFadeMode(Material material, RenderingFadeMode RenderingFadeMode){switch (RenderingFadeMode){case RenderingFadeMode.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 = -1;break;case RenderingFadeMode.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 RenderingFadeMode.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 RenderingFadeMode.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;}}
以上实现我也是第一次做,网上查了很久
各位同仁如有更好实现方式,烦请告知
项目工程在此,需要自取
链接:https://pan.baidu.com/s/1JYDG6DdS38rf6P4gGK28Bg
提取码:84z7
unity 实现3d模型渐隐(修改材质透明度)相关推荐
- unity导入FBX模型时出现材质丢失,模型为白膜的情况
unity导入FBX模型时出现材质丢失,模型为白膜的情况 导入模型后点击该模型 修改属性即可:
- Unity实现3D模型自动分解拆解动画
目录 效果: 代码: 源工程 Unity实现3D模型自动分解拆解动画 效果: 模型动画结束后位置不对的话可能需要修改原模型轴 代码: using System; using UnityEngine; ...
- Unity批量给模型上同一个材质
Unity批量给模型上同一个材质 第一步:先选择所有要上材质的模型: 第二步:将创建的材质拖到右侧属性栏:
- Unity中将3D模型显示在UI上或者显示在UI前面
标题 Unity中将3D模型显示在UI上或者显示在UI前面 一.将3D模型显示在UI上-使用RawImage和Render Texture组合实现效果 1.创建一个RawImage控件 2.创建一个R ...
- Unity导入3D模型的过程与方法
一.介绍 资源是游戏开发中的原材料,也就是组成游戏的模块. Unity只是一个游戏开发引擎,而并不是一个资源开发软件.这就意味着在游戏中需要的资源通常是由一些设计者使用其他软件开发出来的,然后设计者会 ...
- 【Unity】3D模型或粒子渲染在UI上层
方法有很多,我只介绍一种我认为最简单有效的方法,用非常取巧的手段,使用RenderTexture + Camera 在ScrollView里展示3D模型. 效果: 1.首先创建一个RenderText ...
- Unity精品3D模型素材资源下载——暗黑地牢风格篇
本文介绍Asset Store中优质的暗黑地牢风格素材,会从3D模型.插件.音频资源和UI几个角度分别介绍. 一:3D模型篇 1:POLYGON - Dungeons Pack 该Low Poly场景 ...
- Mac Unity导入FBX模型时出现材质丢失,模型为白膜的情况
刚开始学习unity,很多地方的都不懂,导入FBX模型,别人电脑上都是正常的,就我的是白膜,为此我还更换了unity编辑器的版本,换了和同事相同的版本,然而并没有什么用,网上的解决方法都试过了,没有效 ...
- UNITY把3D模型显示在UI层级上的思路
一般UI是处理于显示最高层级的, 因此这里的做法是 使用镜子效果,做镜子可使用renderTexture 然后启用一个摄像机对renderTexture进行数据填充, 然后在ui上使用Raw Imag ...
最新文章
- 用lambda对std::list排序 - 力为的技术博客 - C++博客
- WMI-Win32_baseboard 主板参数
- OpenCV图像处理使用笔记(二)——图像矩阵的掩膜操作
- 使用URL在线语音合成
- Windows7 Credential Manage
- python中main的含义及用法_python中main函数的用法
- 为什么有人宁愿每年买一部千元机,也不愿一次买部高端机?
- Spring Boot——2分钟构建spring web mvc REST风格HelloWorld
- 蓝桥杯 ALGO-34算法训练 纪念品分组(贪心算法+排序)
- 区块链开发_比特币开发1
- linux查看网卡吞吐量和网卡流量用自带命令,iptraf查看。
- 基于Springboot+Vue.js的校园二手商城
- 怎么把word文档免费转换成pdf文件
- 让你自己制作的木马和病毒用360安全卫士杀不出。加壳,免杀,加花,捆绑,压缩。
- Apache 安装详解
- opencv--图像特征提取与描述
- Matlab Tips: 高效实用的快捷命令
- DotNetTextBox V3.0 所见即所得编辑器控件Ver3.2.8 Free(免费版)
- 计算机辅助设计2012cad试题解答,《AutoCAD 2012试题汇编(绘图员级)-计算机辅助设计(AutoCAD平台)-(配1张CD光盘)》—甲虎网一站式图书批发平台...
- sql server查询分析器的一个选项...
热门文章
- Markdown语法简介,markdown导出PDF
- 新型的铁塔基站“能耗管家”
- Jason-表情包在线生成源码(120表情)
- android百度地图的点击事件监听,百度地图监听事件addEventListener无效
- 格林威治时间转换成北京时间,Mon May 10 2021 15:34:42 GMT+0800 (中国标准时间) TO 2021/5/10
- 3D绘图过程及原理简介
- python os.system_python中os.system()的返回值
- 怎么开通游戏快捷支付(已解决)
- 反射(13)——C#开发BHO插件UrlTrack
- asp毕业设计—— 基于asp+access的客户管理信息系统设计与实现(毕业论文+程序源码)——客户管理信息系统