Unity C#でタイルをクリックすると周囲も明るく表示する方法

boy IT

光源の話ではなく、シミュレーションなんかでよくある「マップ上の特定のタイルをクリックすると、上下左右なども明るく表示」するスクリプトです。

スポンサーリンク

クリックしたタイルを明るく表示

unity タイル クリック 周囲を明るく1
コレを元に、作成時のマップに少し暗くカラーフィルターをかけておきます。
//Unity C#
this.GetComponent().color += new Color(1f, 1f, 1f, 0);
タイルのプレハブにクリックした時の処理をアタッチし、
unity タイル クリック 周囲を明るく2
クリックしたタイルは明るくするようにしておきます。

周囲のタイルも明るくする

unity タイル クリック 周囲を明るく3
タイルの名前はプレハブ作成時にそれぞれ座標が組み込まれていて、"objectx" + transform.position.x + "y" + transform.position.yとなっています。
//Unity C#
float yk = this.transform.position.x;
float tt = this.transform.position.y + 1;
//上
GameObject yktt = GameObject.Find("objectx" + yk + "y" + tt);
yktt.GetComponent().color += new Color(0.2f, 0.2f, 0.2f, 0);
従って、名前がクリックした座標よりひとつ上の名前を持つオブジェクトを取得できれば、
unity タイル クリック 周囲を明るく4
ひとつ上のタイルの色も変えられる、ということになります。

同様に全部書くとこうなります。

//Unity C#
    void OnMouseDown()
    {
        this.GetComponent().color += new Color(1f, 1f, 1f, 0);
        float yk = this.transform.position.x;
        float tt = this.transform.position.y + 1;
        //上
        GameObject yktt = GameObject.Find("objectx" + yk + "y" + tt);
        yktt.GetComponent().color += new Color(0.2f, 0.2f, 0.2f, 0);
        //下
        tt = tt - 2;
        GameObject yktt2 = GameObject.Find("objectx" + yk + "y" + tt);
        yktt2.GetComponent().color += new Color(0.2f, 0.2f, 0.2f, 0);
        //右
        tt = tt + 1;
        yk = yk + 1;
        GameObject yktt3 = GameObject.Find("objectx" + yk + "y" + tt);
        yktt3.GetComponent().color += new Color(0.2f, 0.2f, 0.2f, 0);
        //左
        yk = yk - 2;
        GameObject yktt4 = GameObject.Find("objectx" + yk + "y" + tt);
        yktt4.GetComponent().color += new Color(0.2f, 0.2f, 0.2f, 0);
    }
unity タイル クリック 周囲を明るく5
目標は達成できました。端っこのオブジェクトをクリックすると「参照できない」というエラーが出ますが、とりあえずそのまま動かせます。
やりたいことから逆引きするUNITYの使い方まとめ
Unityをやりたいことから学習していけるよう、機能・用途別にまとめたページです。C#の命令別の逆引きは現時点で作っていません。2019の時期に書き始めているので、それより前のバージョンについては言及しません。

コメント