29
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Unity】 GridLayoutGroup×ScrollView

Last updated at Posted at 2019-02-15

今回はUnityのUIにおいて超便利な機能、GridLayOutGroupについて解説します。

今回はScrollViewにGridLayoutGroupを使って、

pazu-10441.jpg

よくゲームで見るこんな感じの図鑑のように、画像などを等間隔に表示することが簡単にできます!

イメージ↓
GridLayOut.gif

#UnityでScrollViewを作る

CanvasScalerのUIScaleModeをScale with screen sizeにして、

スクリーンショット 2019-02-15 18.29.14.png

Create→UI→Scroll ViewからScroll Viewを作りましょう。
AnchorPresetsから右下のStretchを選び、RectTransformの全ての値を0にしてCanvasと同じ大きさにしましょう。
(Stretchは親オブジェクトから何ピクセル離れるか、というイメージです。今回は全て0にしているので親オブジェクトと同じ大きさですね)

スクリーンショット 2019-02-15 18.23.28.png スクリーンショット 2019-02-15 18.30.31.png これで画面いっぱいにScroll Viewが表示されました。

今回は縦方向の移動だけで良いとするので、Scroll RectのHozirontalのチェックを外して、Scrollbar horizontalのオブジェクトも削除しちゃいましょう。

さて、ここから本題ですが、ScrollViewのViewPortの子にContentがあります。ここに画像やボタンを配置するのですが、ここで使える便利な機能がGridLayOutGroupです。

#GridLayoutGroup

contentにAdd Componentから
GridLayoutGroup
Content size Flitter
の2つを追加しましょう。

スクリーンショット 2019-02-15 18.42.09.png 最初はこんな感じ。

GridLayoutGroupについてそれぞれの機能は公式にわかりやすくのってるので以下参照。
Grid Layout Group - Unityマニュアル

ContentSizeFlitterについては、GridLayoutGroupで指定した子の要素の大きさに合わせて、オブジェクトの大きさを調整するという便利なものです。この2つはセットで使われることが多いです。

今回は以下のように数値を設定します。
スクリーンショット 2019-02-15 19.12.05.png

簡単に上から見ていくと、
・Gridの左右25ピクセル、上下10ピクセルは間をあける。
・子のサイズは縦横共に210ピクセル。
・子の要素同士は縦横50ピクセルづつ間隔をあける。
・列数は3で固定する。(Consraint column count)
という感じです。

また、ContentSizeFlitterのFitをPreferred Sizeにするのを忘れずに。これをしないと、Sizeがずれてしまう可能性があります。

ではどんな感じで並ぶのか見てみましょう。今回は最初のGifのようにボタンを並べてそのボタンに数字を表示してみます。

以下のコードをオブジェクトにアタッチして、

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Create : MonoBehaviour
{
    public RectTransform contentRectTransform;
    public Button button;
    private void Start()
    {
        for(int i = 1; i <= 30; i++){
            var obj = Instantiate(button,contentRectTransform);
            obj.GetComponentInChildren<Text>().text = i.ToString();
        }
    }
}

contentRectTransformの部分にContentを、buttonの部分に作成したボタンをいれてあげれば、完了です!

GridLayOut.gif

自分でCellSizeやSpacingなどをいじって、間隔や要素の大きさなどを変更してみましょう!

以上です!!

29
28
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?