Open2

特定のUIだけマテリアルのプロパティを変更する

むじむじ

プロパティ変更によりアニメーションさせられるシェーダーを作り、
それをUIのマテリアルにセットしてスクリプトから制御しようとしたら
他の同じマテリアルをセットしたUIもアニメーションしてしまった。

とりあえずこの辺を参考に
無理やりマテリアルのインスタンスを作ったけどあまり良い方法じゃない気がする
https://answers.unity.com/questions/920091/how-can-i-change-the-shader-parameters-for-an-ui-i.html

            Material mat = Instantiate(GetComponent<Image>().material);
            GetComponent<Image>().material = mat;
    void ApplyProgress() {
        // キャッシュすると何故かうまくいかないので一旦毎度GetComponentさせている...
        GetComponent<Image>().material.SetFloat("_MaskCutoff", m_progress);
    }