栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > 其他

Unity3d 着色器Shader的[Toggle]组件C#脚本控制问题解决方法

其他 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Unity3d 着色器Shader的[Toggle]组件C#脚本控制问题解决方法

问题

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

[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解决的。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/901558.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号