Unity|タイルマップ(Tilemap)をランダムで作成・生成する

当ページのリンクには広告が含まれています。

Unity2Dのタイルマップ(Tilemap)でランダムマップ画面を作成してみます。

はじめに

Unityのバージョンは6000.5.2f1です。

下記記事にてタイルマップ機能を利用して簡単なマップを作成しました。今回はランダムなマップを作成・生成してみます。

上記記事にあるようにタイルパレットを設定します。

作成開始

まずは「RuleTile」を利用してランダムマップを作成する方法です。

ランダムマップを作成

「Project」→「2D」→「Tiles」→「Rule Tile」を追加します。

「Rule Tile」の「TillingRules」にSpriteを追加します。

Paletteに「RandomTile」を追加します。

ランダムタイルを選択してシーン画面をなぞると、ランダムでタイルが選択されます。

ランダム生成

次にランダムでマップを生成してみます。空オブジェクトを追加して名前を「MapGenerate」に変更。

「MapGenerate」という名前で新規スクリプトを作成して、中身を下記に変更します。「0,0,0」の位置にランダムで選択したタイルをセットしています。

using UnityEngine;
using UnityEngine.Tilemaps;

public class MapGenerate : MonoBehaviour
{
    [SerializeField] private Tilemap tilemap;
    [SerializeField] private Tile[] tiles;

    private void Start()
    {
        Tile tile = tiles[Random.Range(0, tiles.Length)];
        tilemap.SetTile(new Vector3Int(0, 0, 0), tile);
    }
}

空オブジェクトにアタッチして、パラメータをセットします。

実行して下記の様にタイルがセットされたらOKです。

スクリプトを下記に変更します。パラメータで指定したサイズでマップを生成します。

using UnityEngine;
using UnityEngine.Tilemaps;


public class MapGenerate : MonoBehaviour
{
    [SerializeField] private Tilemap tilemap;
    [SerializeField] private int mapSize;
    [SerializeField] private Tile[] tiles;

    private void Start()
    {
        RandomMapGenerate();
    }

    private void RandomMapGenerate()
    {
        for (int y = 0; y < mapSize; y++)
        {
            for (int x = 0; x < mapSize; x++)
            {
                Tile tile = tiles[Random.Range(0, tiles.Length)];
                tilemap.SetTile(new Vector3Int(x, y, 0), tile);
            }
        }
    }
}

パラメータを指定して実行すると下記の様な感じに。縦横10マス作成しています。

中心部がズレているので、オブジェクトのPositionを左下始点にするか「SetTile」部分を下記に変更します。

tilemap.SetTile(new Vector3Int(x - mapSize / 2, y - mapSize / 2, 0), tile);

Tileを追加すると簡単にランダムタイルを増やすことが出来ます。

タイトルとURLをコピーしました