您当前的位置: 首页 >  unity

染指流年灬

暂无认证

  • 9浏览

    0关注

    194博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Unity3d 着色器Shader的布尔开关变量[Toggle]组件C#脚本控制无效问题解决方法

染指流年灬 发布时间:2022-10-16 20:36:54 ,浏览量:9

问题

在场景效果调出了一个模型的效果着色器,需要程序对着色器的一个属性进行动态修改,属性如下:

[Toggle(_USELINE_ON)] _UseLine("Use Line", Float) = 0

按我之前的认知,我就直接修改Float的数值为1或者0应该没问题:

//关闭
 AniMat2.SetFloat("_UseLine", 0);
 
//打开
 AniMat2.SetFloat("_UseLine", 1);

然而并没有效果,翻了半天网页也没查到结果,最后着色器生成的代码中找到了突破口。

解决方法

在着色器代码中看到很多类似代码段:

#ifdef _USELINE_ON
...
#else
...
#endif

[Toggle(_USELINE_ON)]是进行了与_USELINE_ON关联 这是进行了宏定义,那我动态的修改宏定义就可以完成控制

方法就是这个=动态修改宏定义= 禁用此材质的本地着色器关键字。Material.DisableKeyword 方法:

在这里插入图片描述 为此材质启用本地着色器关键字。Material.EnableKeyword 方法:

在这里插入图片描述 这样就可以进行控制着色器的Toggle效果

//关闭
  AniMat2.DisableKeyword("_USELINE_ON");
//打开
  AniMat2.EnableKeyword("_USELINE_ON");
打包后无效

打包后该功能无效的问题,我是通过https://www.jianshu.com/p/32f6e8a217d6 解决的。

我是通过方法3修改Shader – multi_compile解决的。

关注
打赏
1665909078
查看更多评论
立即登录/注册

微信扫码登录

0.0369s