【Unity】UGUI中动态修改Image的材质,导致所有图片的材质都变了

今天项目中有个需求是,当奖牌没有获得的时候,变灰色,这个灰色不单单是改变原图片的颜色就行了,而是需要特定的shader进行颜色叠加才能实现。(很多游戏技能变灰应该也是这样做的)

当弄好shader做好材质之后,当需要变灰时执行下面方法

    void SetGray()
    {
        Icon.color = Color.gray;
        Icon.material = Material_Gray;  //假设Material_Gray为变灰的材质球
        
    }

这样设置之后,当代码一运行,所有ui界面全变灰了,并且就算重启运行项目,还是灰的,吓得我以为要把全部ui重新改一遍。
研究后发现相同材质的Image在创建后引用的是内存中同一份材质,所以改掉一个后,其实就是改掉了所有Image的默认材质,这个时候如果需要单独修改这个Image的材质,如使某些技能灰掉,那么就在创建实例时新建一份材质,之后修改这一份材质,导致的问题是这样内存中就会有多份材质存在,慎用。如下:

    void SetGray()
    {
        Icon.color = Color.gray;
        if (Material_Gray != null)
        {
            Material material = new Material(Material_Gray);
            Icon.material = material;
        }
    }

over~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值