HDRP打包后材质黑色问题
HDRP版本是7.3.1 (升级到7.4.1也是一样的)
Unity版本是2019.3.8f
问题是我通过替换Shader的方式改变材质的效果(改成高亮或者透明),然后还原,在Editor中正常的,但是在打包后运行时还原回来材质变成了黑色。是那种纯黑色,没有贴图的,怀疑在切换Shader过程中,原来的Shader的设置丢失了。
修改材质的Shader时有用ShaderMaterial就没问题,用Material就有问题。
我的需求时点击一物体,该物体变成高亮颜色,其他物体全部透明。
因为其他物体数量很多,几万个,如果用修改其他物体的材质的方式,而不是修改SharedMaterial的Shader方式,需要几秒的实际。
一、设置高亮
1.设置高亮_Material_Shader
for (int i = 0; i < meshRender.materials.Length; i++)
{meshRender.materials[i].shader = NodeHighlightSystem.Instance.Hightlight_Shader;
}
2.设置高亮_SharedMaterial_Shader
for (int i = 0; i < meshRender.sharedMaterials.Length; i++)
{meshRender.sharedMaterials[i].shader = sys.Hightlight_Shader;
}
3.设置高亮_Material
Material[] materialsNew = meshRender.materials;
for (int i = 0; i < meshRender.materials.Length; i++)
{materialsNew[i] = NodeHighlightSystem.Instance.Highlight_Mat;
}
meshRender.materials = materialsNew;
二、还原高亮
1.还原_Material_Shader,Shaders事先保存下来
for (int i = 0; i < meshRender.materials.Length; i++)
{meshRender.materials[i].shader = shaders[i];
}
2.还原_SharedMaterial_Shader,Shaders事先保存下来
for (int i = 0; i < meshRender.materials.Length; i++)
{meshRender.sharedMaterials[i].shader = shaders[i];
}
3.还原_Materials,Materials事先保存下来
meshRender.materials = materials;
三、全部透明和还原
1.设置透明_SharedMaterial_Shader,allSharedMaterials提前获取
if (allSharedMaterials.Count == 0){GetAllSharedMaterials();}for (int i = 0; i < allSharedMaterials.Count; i++){Material item = allSharedMaterials[i];if (item.shader!= Transparent_Shader){//item.shader = allSharedShaders[i];item.shader = Transparent_Shader;}}
2.透明恢复_SharedMaterial_Shader,allSharedShaders提前获取
for (int i = 0; i < allSharedMaterials.Count; i++){Material item = allSharedMaterials[i];item.shader = allSharedShaders[i];}
-------------------------------------------------------------------------------------------
四、组合测试
组合1:1.设置高亮_Material_Shader+1.还原_Material_Shader+透明其他
会变黑
最后会黑成这样
组合2:1.设置高亮_Material_Shader+2.还原_SharedMaterial_Shader+透明其他
会变黑
组合3:1.设置高亮_Material_Shader+2.还原_Materials+透明其他
不会变黑
组合4:2.设置高亮_SharedMaterial_Shader+2.还原_Material_Shader+透明其他
不会变黑
因为修改的是SharedMaterial的Shader,点击的物体共用材质的其他物体也会高亮。
还原回去再点击就是独立高亮了。
组合5:2.设置高亮_SharedMaterial_Shader+2.还原_SharedMaterial_Shader+透明其他
不会变黑
和上面情况类似,但是,我理解这里还原也是SharedMaterial的,应该后面也都是
组合6:3.设置高亮_SharedMaterial_Shader+3.还原_Materials+透明其他
不会变黑,而且Materials还原回去后,再点击,相关的物体也一起高亮,奇怪,和上面的情况
不管怎样,高亮都是不能使用修改SharedMaterial的Shader的方式的。
组合7:3.设置高亮_Materials+3.还原_Material_Shader+透明其他
变白了...
修改了材质后,修改材质的Shader,其实就没有还原回去了,最后相当于是把高亮材质再改了个Shader。
组合8:3.设置高亮_Materials+3.还原_SharedMaterial_Shader+透明其他
和上面一样,变白了
组合9:3.设置高亮_Materials+3.还原_Materials+透明其他
没问题,可以
三、最终的解决办法
HDRP打包后材质黑色问题相关推荐
- Expo大作战(十九)--expo打包后,发布分用程序到商店的注意事项
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...
- 便利贴--25{uniapp移动端滑动模块-因为uniapp打包后没有window,所以要另外去做监听和触控事件的传递}
便利贴--25{uniapp移动端滑动模块-因为uniapp打包后没有window,所以要另外去做监听和触控事件的传递} 效果![请添加图片描述](https://img-blog.csdnimg.c ...
- 解决Springboot项目在idea中能正常使用,但打包后无法运行的情况
解决Springboot项目在idea中能正常使用,但打包后无法运行的情况 自己做一些活的时候偶然发现的bug:在springboot的web项目中,打包之前能正常的运行,包括测试类里面的代码也都是正 ...
- vue打包后图片找不到情况
打包之前需要修改如下配置文件: 配置文件一:build>>>utils.js (修改publicPath:"../../" , 这样写是处理打包后找不到静态文件( ...
- vue+elementui项目打包后样式变化问题
main.js中的引入顺序决定了打包后css的顺序,组件内的样式没有生效可能是被第三方组件样式覆盖了. 把第三方组件 ElementUI放在前面引入,router放在后面引入,就可以实现组件样式在第三 ...
- flask 渲染 vue 打包后的dist文件(直接用后端渲染)
flask 渲染 vue 打包后的dist文件(直接用后端渲染) vue项目打包出dist文件 npm run build 代码 from flask import Flask from flask ...
- 使用webpack打包后,vscode中vue代码变白色的解决办法
使用webpack打包后,vscode中vue代码变白色的解决办法 卸载vetur,重装vetur
- 多模块打包后,扫描不到@controller和@service,实现 ADD DIRECTORY ENTRIES
多模块打包后,扫描不到@controller和@service等Bean. 原因:打包时没有生成目录信息 解决办法: 1.在eclipse或者myeclipse 打包时 勾选 ADD DIRECTOR ...
- webpack打包后自动弹出浏览器查看效果
当配置了webpack自动打包和预览页面后,每次打包都要复制 http://localhost:8080/ 到浏览器中查看效果,那么我们能不能在打包后自动打开浏览器查看效果呢,答案是可以的. 在pac ...
最新文章
- 400名微软员工主动曝光薪资:28万元到228万元不等!
- IROS 2020 | 跨视角语义分割前沿进展
- 【s操作】手机移动数据网络问题初级解决方案,论手机运营商网络状况
- python修改父类属性_Python super和设置父类属性
- 开机启动脚本/etc/init.d/rcS
- 字符串startswith_JavaScript字符串startsWith()方法与示例
- Maven : [ERROR] Project xxx is duplicated in the reactor @
- bucket sort sample sort 并行_Java 中 Arrays.sort 和 Arrays.parallelSort 哪个更快?
- 如何避免程序员的大脑超载?
- MFC CListCtrl 将一个列表的选中项添加到另一个列表
- UnicodeDecodeError: 'gbk' codec can't decode byte 0xab in position 11126: illegal multibyte sequence
- 搜索引擎优化(SEO) 基础常识
- Python运算(五)统计statistic模块
- 笔记本键盘失灵,外接键盘不行,只有无线鼠标能用【完美解决】!
- dsp调音一次多少钱_dsp调音技巧
- Taproot升级在即!门限签名技术将给数字钱包带来什么?
- RFID资产管理解决方案
- 商务邮箱一般用什么邮箱正式?VIP邮箱名怎么设置好?
- MySQL JDBC 客户端反序列化漏洞分析
- access中数据类型转换函数
热门文章
- debussy vhdl co-simulation
- linux 常用命令 及常用 排查问题 工具
- 全面拥抱云 用友U9 cloud来了
- js 高耗时代码异步处理
- RSA实现对文件的加密解密
- python初中数学建模培训_中学生数学建模训练营VIP班
- c语言数组越界也太难了吧,跨函数越界啥意思?
- Android Studio Chipmunk Patch 2(android-studio-2021.2.1.16)下载地址
- lib linux.so2 bad,linux – docker,openmpi和/ proc / mounts行的意外...
- java park_park和unpark