こんにちわ、オオバです。

📝 目次

分からない内部処理を放置しない

UnityにはCanvasGroupというUIの透明度
一括操作する便利なコンポーネントが用意されています。

オオバは以前から

「なぜ一括処理できるのだろうか?」

と疑問でした。
理解するきっかけは1つのトラブルです。

CanvasGroupは頂点カラーを操作していた

uGUIのシェーダーを新たに書いたとき、
CanvasGroupが動かなくなりました。

シェーダーの変更前後を比較しながら調査すると、
CanvasGroupは頂点カラーを操作していたという事が分かりました。

厳密には自分自身と子階層のメッシュの頂点を取得し、
その頂点カラーのアルファに値を代入しているようです。

以下はUI-Default.shaderのフラグメントシェーダーの冒頭です。

👉変更前のシェーダー

fixed4 frag(v2f IN) : SV_Target  
{
    half4 color = (tex2D(_MainTex, IN.texcoord) + _TextureSampleAdd) * IN.color;  

👉変更後のトラブルが発生したシェーダー

頂点シェーダーから送られる頂点カラー(IN.color)の乗算を外しています。

fixed4 frag(v2f IN) : SV_Target  
{
    half4 color = (tex2D(_MainTex, IN.texcoord) + _TextureSampleAdd);  

するとCanvasGroupが適用されなくなりました。
この現象を確認したことで
「CanvasGroupは頂点カラーを操作している」
という事が推測できました。

内部処理の理解を放置すると開発効率は下がる

CanvasGroupのトラブルをきっかけにオオバの考え方は変わりました。

「内部処理を放置すると開発効率が下がる」

もちろん内部処理を調査するのは時間がかかるためバランスは大事なのです。
しかし調査することで新たな技術的な発見もあって面白いのが内部処理です。

超優秀なプログラマーたちが作っているUnityエンジンには多くの工夫が盛り込まれています。
その氷山の一角を知るだけでも大きなメリットがあるのではないかと思った次第です。

参考リンク

👉 オススメ記事

2021秋 Asset Refreshセール
100以上のアセットがなんと50%OFF!!オオバもいくつか買いました!
期間 : 10月2日午後3時59分まで

👩‍💻 検証環境