モノ創りで国造りを

ハード/ソフト問わず知見をまとめてます

簡単に2Dゲームのステージを作成する方法 ---TileMapEditor?何それ?---

UnityのUIは素晴らしいと思いますが、2Dゲーム開発においてはスクリプトを多用したほうが楽な事が多々あります。
例えば2Dステージのブロックの配置とか。 blockのprefabを作成しておけば以下の記述で 配置が完了します。  

    string[] stage = {
                        "b    bb   b",
                        "b     b   b",
                        "bbbbb bbb b",
                        "b     bb  b",
                        "b   bbb   b",
                        "bbb     bbb",
                        "bbbbbbbbbbb"
    };

   void Start() {
        for (int i = 0; i < stage.GetLength(0); i++) {
            for (int j = 0; j < stage[i].Length; j++) {
                if (stage[i].Substring(j, 1) == "b") {
                    Instantiate(block, new Vector3(startX + j * massWidth, startY - i * massHeighth, 0.0f), Quaternion.identity);
                }
            }
        }
    }

blockの画像をこれにしておくと
f:id:yuji2yuji:20171220162644p:plain
結果はこう。
f:id:yuji2yuji:20171220162635p:plain
strign型の配列で、bと記載がある箇所にblockを配置するというコードです。
int型かchar型の二次元配列でも可能ですが、数字・文字間にカンマ・シングルクオテーションが必要で、配列が間延びするという欠点があります。
加えて桁数が増えると上下の配列に書かれた数字が左右にずれてしまい、作製途中のステージをイメージしにくくなります。
またint型の場合、1桁だけだと0~9しか使えないため、10個しかオブジェクトを選択できないという欠点があります。
試行錯誤の末、視認性が良いStringに落着きました。
文字に応じて呼び出すprefabを変えれば、簡単に多様なステージを作れます。
例えば内側に草を生やしたblockにしたければ
f:id:yuji2yuji:20171220234737p:plain
ちょっと細工をすると3Dっぽい雰囲気も出せます。
f:id:yuji2yuji:20171220234742p:plain
キャラクタやアイテムや敵の初期位置も同様の方法で作成可能です。

同じブロックをちりばめると、見た目が安っぽいゲームになってしまうのが問題か。