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+透明其他

没问题,可以

三、最终的解决办法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值