ScrollViewのつかいかた

Unity の ScrollView のつかいかたを紹介します。

Unity でスクロール表示させたい場合には、Scroll Viewを使うんだけど、このScrollViewは複数のオブジェクトで構成されていて、すこし慣れが必要かも。

あと、DoozyUIを使いつつ、ScrollViewを使う場合は、ハマりどころがあったので、そちらも紹介しますね。

Scroll View をつかった例

Scroll View を追加する

Scroll Viewは「UI>ScrollView」から追加します。

追加したScroll Viewオブジェクトの下には、たくさんのオブジェクトが含まれます。

Scroll View オブジェクトを配置する

それぞれの役割は以下のとおり。

Viewport 表示する領域
Content コンテンツの領域
Scrollbar Horizontal 横方向のスクロールバー
Scrollbar Vertival 縦方向のスクロールバー

表示領域がViewportで、コンテンツの領域がContentということ。

スクロール操作をするので、基本的に ContentサイズがViewportサイズより大きくはず。試しにContentサイズを広げてみます。

Content サイズを Viewport より広くする

その状態で実行すると、スクロール操作できます!

実際に操作しながら、Sceneの挙動を見てみると、Viewport と Content の関係がよく分かるはず。

Scroll Viewを実行する

スクロールバーの表示・非表示

スクロール方向が縦方向だけの場合は、横方向のスクロールバーは不要。

そういった場合に、スクロールバーの表示・非表示は、Scroll Viewで設定します。

Horizontal / Vertical でスクロールさせる方向を指定。
ScrollbarのVisibilityで、自動で隠すかどうかなどを設定。

Scroll View の設定

Scroll View にコンテンツを追加する

ここからオブジェクトを追加して実際にスクロール表示させてみます。

Contentにオブジェクトを追加するだけ

やることは、Conent以下にオブジェクトを配置するだけ。

Content以下にTextを配置して実行

Contentのサイズを自動で決める

Contentに含めるものが、あらかじめ決まっている場合は良いけど、動的にContentの内容を変えたいケースの方がが多いはず。

例えば、アイテムリストを表示する場合だと、アイテムの種類の数をContentに含めることになるよね。

こういったContentに含めるオブジェクトのサイズに応じて、Content のサイズを自動で決めたいケースがあります。その場合は、Content Size Fitter コンポーネントを使います。

あと、Contentに含めるものを等間隔に整列させたいケースも多いかも。そういった場合は、Layout Groupコンポーネントを使います。

Content Size Fitter と Vertical Layout Group を追加

これで、Contentの中に必要なオブジェクトを整列させつつ、Contentのサイズを自動で決定することができました。

DoozyUIと併用する場合の注意

DoozyUIを使っている場合に、なぜかScrollViewが正しく動かない場合がありました。

以下の2点の設定で回避できましたので、そちらを紹介します。

  1. EventSystem を追加する
  2. Panelを追加して、その下にScrollViewを配置する

UnityのUIを使うと自動でEventSystemが追加されるけど、DoozyUIをつかう場合だと、EventSystemが追加されないケースがありました。もしプロジェクトにEventSystemが追加されていなければ、追加する必要があります。

あとは、UIのPanelの子要素じゃないとどうもScrollViewが動作しないみたい。これに関しては、あまり詳しく調べていないので、他の回避方法があるかもしれません。

まとめ

ScrollViewについて紹介しました。

ContentSizeFitterやLayoutGroupなどと一緒に使うことが多いので、正しく設定しないと、思い通りに動作しないこともありました。UIの他コンポーネントについても理解しておかないと、使いこなすのは難しいかもしれません。

スマホアプリだとスクロールは当たり前の操作になるので、ScrollViewのつかいかたはしっかり把握しておきたいです。