Unity & C# 学習教材

ライツアウト

学習目標

前提知識

概要

格子状に並べられたセルをクリックすると、自身とその上下左右最大4個のセルの色が反転するプログラムを実装を目指します。プレイヤーはルールに従って色が反転するセルを操作し、最終的に全てのセルを指定の色に染めることができれば勝ちとなります。その他、基本的なルールはライツアウトに従うものとします。

Unity 準備

新規シーンの状態から UI の Canvas ゲームオブジェクトを作成します。

作成した Canvas ゲームオブジェクトに Grid Layout Group コンポーネントを追加します。

追加した Grid Layout Group コンポーネントの Spacing の X と Y の値を 10 に、Child Alignment の設定を Middle Center に変更します。グリッド上に並べるセルの行数または列数を Constraint の設定で固定化できます。例えば Constraint の設定を Fixed Column Count に変更して、下部の Constraint Count を 5 にすると列数が 5 列に固定されます。この設定は課題に応じて、スクリプトから変更しても構いません。

新規に C# スクリプトを作成し、Canvas ゲームオブジェクトに設定します。

スクリプト

Canvas ゲームオブジェクトに設定した C# スクリプトを編集して、格子状に並べられたセルを生成しましょう。この場では UI の Image コンポーネントを使ってセルの色を設定します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;

public class Sample : MonoBehaviour, IPointerClickHandler
{
    private void Start()
    {
        for (var r = 0; r < 5; r++)
        {
            for (var c = 0; c < 5; c++)
            {
                var cell = new GameObject($"Cell({r}, {c})");
                cell.transform.parent = transform;
                cell.AddComponent<Image>();
            }
        }
    }

    public void OnPointerClick(PointerEventData eventData)
    {
        var cell = eventData.pointerCurrentRaycast.gameObject;
        var image = cell.GetComponent<Image>();
        image.color = Color.black;
    }
}

この時点ではセルの初期色が白で、クリックすると黒に反転することが確認できます。

課題

参考リンク

まとめ