Unityを使っていると、Objective-CやJavaなどで作成するよりも簡単にできることが多い反面、今まで簡単に出来ていたことを実現するのが以外に手間だったりして、戸惑うことがあります。
特にUI関連はまったくもっていけていないと個人的には思います。

ということで、今回のテーマは「スクロールした時のみスクロールバーを表示する」です。

確かAndroidでもiOSでもスクロールした時のみスクロールバーを表示するのは簡単に出来たはずなのですが、Unityの場合は、これが一筋縄では行きません(私にとっては)。

ScrollbarにFade Durationという項目はあるものの、これはどうやらスクロールバー自体をクリックしてドラッグした場合などに色を変化させる時間を設定するためのもののようです(詳しくは分かりませんが)。

scrollbar

ではどうすればいいのかというと、これまたいくつか方法があるようです。
例えば以下のページにあるように、ScrollRectを継承した独自クラスを作成するのも、その一つです。

uGUI スクロールしてないときはバーをフェードアウト:Qiita

ただ、私の環境だと上記ページに掲載されているスクリプトは上手く動かなかったのと、エラーを見ても意味がわからなかったので断念しました。

ということで、ものすごく簡易的な方法をご紹介します。
それはScrollRectのOnValueChangedでスクロールバーを表示させるというものです。

scrollbar2

例えばですが、以下のようなメソッドを用意して表示させます。

    public void EnableScrollBar() {
        if (scrollBarEnabled == false) {
            scrollBarEnabled = true;
            scrollBar.SetActive(true);
            Invoker.InvokeDelayed(DisableScrollBar, 1.0f);
        }
    }

    void DisableScrollBar() {
        scrollBar.SetActive(false);
        scrollBarEnabled = false;
    }

表示した後は一定時間後に非表示に切り替えます。
ここではゲームがポーズ中の前提なので、前回の記事でご紹介したInvoker.csを使用しています。

実際に動いているところは以下の動画をご参照下さい。



本来はフェードアウトのアニメーションを実行すればいいかもしれませんが、面倒だったので入れていません。 例により、もっといい実装の方法があるかもしれませんので、あくまで参考程度でお考えいただければ幸いです。