タイルマップをゲーム中に書き換える処理【Unity,Tilemap】

2021年7月14日

タイルマップをゲーム中に変更する処理について。ゲーム内でタイルマップの一部を変更するためのスクリプト。下図のようなシチュエーションで白いタイルをマウスでクリックすると、その部分だけ灰色になるような処理を作りたいというときに利用出来ます。

タイルマップをゲーム中に書き換える処理

今回はマウスで選択(クリック)したタイルを指定のタイルで置き換えることができる処理。

スクリプト

public class ReplaceTile : MonoBehaviour
{
    public TileBase m_tileGray;
    public Tilemap m_tilemap;
    void Update()
    {
        if(Input.GetMouseButtonDown(0))
        {
            Vector3 mouse_position = Camera.main.ScreenToWorldPoint(
                Input.mousePosition);
            Vector3Int grid = m_tilemap.WorldToCell(mouse_position);
            if (m_tilemap.HasTile(grid))
            {
                m_tilemap.SetTile(grid, m_tileGray);
            }
        }
    }
}

スクリプトの解説

メンバー変数に、変更したいタイルマップと、塗りつぶしたいタイル(Tile or Tilebase)をセットする必要があります。

変数名用途
m_tileGray塗りつぶしたいタイル
(Tile/Tilebase継承してるやつ)
m_tilemap塗りつぶされたたいTilemap

インスペクターに上記の変数をセットした状態で、タイルの存在している場所を選択するとその場所のタイルをm_tileGrayに変更しています。

なお、サンプルのスクリプトでは、m_tilemap.HasTileでタイルの存在を確認してから上書き変更を行っておりますが、タイルのない場所などの上書きをする場合は、このif文は不要です。

Tilemap, Unity

Posted by watanabe