パネルにボタンが配置してあるとします。ボタンはパネルの子になっています。何かの事情でこのパネルのα値を変えたいとします。以下のコードではうまくいきません(goはパネルのGameObject)。ボタンのテキストはそのままで、パネルの地だけが半透明になってしまいます。
Color color = go.GetComponent<Image>().color;
color.a = 0.2f;
go.GetComponent<Image>().color = color;
次のようにするとうまく行きます。
まず、パネルにCanvasGroupコンポーネントをAddComponentします。CanvasGroupは検索の虫眼鏡をクリックして、「can」くらいを入れれば見つかります。
そうした上で以下のコードを実行します。
go.GetComponent<CanvasGroup>().alpha = 0.2f;
ジワジワ変えたければコルーチンでやればよいでしょう。ゲームで画面を別の画面に切り替えるとき、いきなり「バン!」と変わっても機能上は変わらないのですが、いかにも味気ありません。0.5秒くらいでジワッと変えたいときにこの方法を使えます。