Amazonで商品を見るセール会場へ

Unity uGUIスクロールビューの作り方|2列リストと動かないときの確認

uGUIのScroll Rectを使い、12個の画像を2列で並べる縦スクロールの設定例を示します。

自作のC#スクリプトは使わず、表示範囲、リストの高さ、入力、スクロールバーを順に設定します。

2026年10月25日にuGUI 2.0の公式資料を再確認しました。

掲載画像は既存の旧作例で、正確なEditor版は未確認です。

今回Unityでの実行は行っていないため、使用するEditor・パッケージ版で手順と結果を確認してください。

目次

先に確認する完成条件

  • 12項目が2列・6行に並ぶ。
  • Viewportの外へ出た画像が隠れる。
  • 表示範囲内のドラッグとホイールで上下に移動する。
  • スクロールバーを動かすとContentの表示位置も変わる。

次のGIFは既存記事の旧完成作例です。

今回この環境で再実行した結果ではありません。

スクロールビューの完成イメージ
スポンサーリンク

1. CanvasとScrollViewを作る

既存Canvasに作成する場合はCanvasのGraphic Raycaster、EventSystemと入力方式に合うInput Moduleを確認します。

旧Input ManagerではStandaloneInputModule、Input SystemではInputSystemUIInputModuleを使います。

公式のUI入力資料

GameObjectのUIメニューからScroll Viewを作ると、Viewport・Content・Scrollbar等の標準構成を出発点にできます。

以下は旧作例のPanelから組む方法で、標準作成後にも同じ役割を照合できます。

両方を重ねて作る必要はありません。

  1. UIのPanelを作り、名前をScrollViewにする。
  2. Rect Transformを600×384へ設定する。これはこの作例の設計値で、全端末向けの推奨値ではない。
  3. ScrollViewにScroll Rectを追加する。
ScrollViewの作成

2. Viewportの表示範囲と入力面を作る

  1. ScrollViewの子にUI用の空オブジェクトを作り、名前をViewportにする。Rect Transformがあることを確認する。
  2. アンカーを上下左右のStretchにし、余白を左16・上16・下16、右48へ設定する。右側は今回のスクロールバー用の余白として広く取る。
  3. ViewportにImageとRectMask2Dを追加する。ImageはRaycast Targetを有効にし、背景を透明にしたい場合はColorのAlphaを0にする。
  4. Viewportの内側にContentを置く。RectMask2Dは長方形かつ同一平面のUI用で、曲線の形状を切り抜く機能ではない。

旧画像ではViewportをEmptyとして作成していますが、Scroll Rectだけでは表示範囲外の画像を切り抜けません。

表示範囲の切り抜きにはRectMask2D、入力を受ける面にはImageを使います。

RectMask2Dの条件

Viewportの作成

3. Contentと12個のItemを作る

  1. Viewportの子にContentを作る。横方向をStretch、縦方向のアンカーを上端へ、Pivot Yを1へ設定する。Left/RightとPos Yは0を基準にする。
  2. ContentにGrid Layout GroupとContent Size Fitterを追加する。Horizontal FitはUnconstrained、Vertical FitはPreferred Sizeにする。
  3. Contentの子にUIのImageを作りItem_1とする。複製して12個にする。子の寸法は次のGrid Layout GroupのCell Sizeで決まる。
Contentの作成
アイテムの作成

Grid Layout Groupの設定

目的・症状設定・確認先
Cell Size252×96
SpacingX=16、Y=16
PaddingLeft=16、Right=0、Top=0、Bottom=0
Start Corner・Start AxisUpper Left・Horizontal
Child AlignmentUpper Left
ConstraintFixed Column Count、Count=2

旧作例の幅256では、2列の必要幅が16+256×2+16=544になります。

今回のViewport幅は600−16−48=536なので、旧値のままでは8足りません。

Cell Sizeの幅を252へ下げると必要幅536に合います。

旧作例の256幅をそのまま使う場合は、ScrollViewまたはViewportを広げてください。

このページでは252×96を採用する例として進めます。

6行の高さは96×6+16×5=656、Viewportの高さは384−16−16=352という計算上の期待値です。

Playモードで実際のContentの高さと表示を確認してください。

Grid Layout Groupの設定

Fixed Column Countで列数を決めると、高さをContent Size Fitterで伸ばす制御を整理できます。

Gridは子のpreferred sizeではなくCell Sizeで寸法を決めます。

Grid Layout Groupの公式資料

4. Scroll Rectに参照を割り当てる

  1. Content欄へContentのRect Transform、Viewport欄へViewportのRect Transformをドラッグする。
  2. Horizontalを無効、Verticalを有効にする。
  3. 最初はMovement TypeをClampedにして端で止まることを確認する。弾ませたい場合はElasticへ変える。
  4. Playモードで表示範囲内をドラッグし、Contentが上下に移動するか確認する。
Scroll Rectの設定

Scroll Rectの公式資料では、スクロールのための入力をScroll Rectの範囲内から受け取る必要があります。

画面の別の場所をドラッグしても動くとは限りません。

ドラッグ後に流れ続ける動きを切り分けるときは、Inertiaを一度オフにします。

Clampedは端を超える動きの制限で、慣性を無効にする設定ではありません。

ドラッグだけ反応してホイールが動かない場合は、Scroll Sensitivityが0になっていないか確認してください。

Input Systemを使う場合は、InputSystemUIInputModuleのScroll Wheelアクションと入力の割り当ても確認します。

5. 縦スクロールバーを付ける

  1. ScrollViewの子、Viewportの兄弟としてScrollbarのImageを作る。右端の中央を基準に上下へStretchし、幅16、Pos X=-24、Top/Bottom=16を作例の値とする。
  2. Scrollbarの子にHandleのImageを作る。全方向Stretch、余白3を旧作例の開始値とする。
  3. ScrollbarにScrollbarコンポーネントを付け、Handle RectへHandle、必要なTransitionのTarget GraphicへHandleのImageを割り当てる。
  4. DirectionをBottom To Topにし、Scroll RectのVertical Scrollbar欄へScrollbarを割り当てる。
スクロールバーの下敷き
ハンドルの作成
Scrollbarコンポーネントの設定

ScrollbarはViewportの兄弟、HandleはScrollbarの子です。

HandleをScrollView直下に置かないよう階層を確認してください。

自動非表示はPlayモードで確認します。

サイズを自動で広げるVisibilityを使う場合は、ViewportがScrollViewの子であることも確認します。

Scrollbarの公式資料

まずVertical ScrollbarのVisibilityをPermanentにして、幅536のViewportで設定を確認します。

Auto Hide And Expand Viewを選ぶと、バーの表示に応じてViewportの幅もScroll Rectが変更します。

先に固定幅で動作を確かめ、自動拡張を使う場合は表示・非表示の両方で余白を確認してください。

Scrollbarの表示方式とViewportの変更条件

動かない・はみ出すときの確認順

目的・症状設定・確認先
ドラッグもホイールも反応しないEventSystem、Input Module、Graphic Raycaster、Raycast Target、前面画像の入力遮断を確認
移動できる範囲がないContentの高さがViewportを超えるか、FitterがPreferred Sizeか確認
画像が枠外にも見えるViewportのRectMask2D、Contentの親子関係、UIが同一平面か確認
項目が横にはみ出す列数×Cell Size+Spacing+PaddingとViewportの幅を比較
上に戻る・寸法が毎回変わる同じRectの同じ軸を親Layout Group等で重複制御していないか確認
バーだけ動いてリストが動かないScroll RectのVertical Scrollbar参照、Content・Viewport参照を確認

アンカー・サイズ制御の基礎はuGUIの基本設定へ、画面全体の拡大縮小はCanvasの設定へ分けています。

項目数を12個から13個へ増やすと、2列では7行になります。

この設定での高さは96×7+16×6=768が計算上の期待値です。

一方、12個から11個へ減らしても6行のため、高さ656は変わりません。

高さが変わらないことだけでContent Size Fitterの不具合と判断しないでください。

Auto Hideの確認には6個・3行へ減らし、高さ320でViewportの352以内に収まる条件を試します。

これらは設定値からの計算例で、Unityで実測した結果ではありません。

確認を終える条件

  • 12項目の追加・削除でContentの高さが追従する。
  • 先頭と末尾まで移動でき、Viewport外の画像が隠れる。
  • ドラッグ・ホイール・Scrollbarのそれぞれで表示位置が変わる。
  • 別の画面比率でも項目とバーが重ならない。

大量の項目を生成する場合の仮想化や、スマートフォン実機のタッチ性能はこの設定例だけで確認できません。

今回の実機操作・負荷計測は未実施です。

スポンサーリンク

関連するUnityの記事

uGUIでのUI制作は、ほかにも書いています。

ほかの症状はUnityのエラー一覧で、症状別に先に確かめることをまとめています。

次に学ぶ・作業環境を選ぶ

学習を続けたい方や、作業環境を整えたい方は、目的に合うガイドをご覧ください。

Unityのおすすめ書籍

開発PCの選び方

周辺機器の優先度

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

須澤 元貴のアバター 須澤 元貴 代表社員

MOTOKI合同会社 代表社員。
アニメ・映像業界とゲーム業界で、2D・UI・3D・アニメーション制作、映像編集、ツール制作に携わってきました。
現在はWordPressを中心にWebサイトの制作とカスタマイズを手がけています。
著書に『Unity デザイナーズ・バイブル』『Unityゲーム プログラミング・バイブル 2nd Generation』(ボーンデジタル)。
岡山県出身、埼玉県在住。

目次