コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】タイルマップ - Tilemap クラスでよく使う関数

はじめに

この記事では Tilemap クラスでよく使う関数をまとめました

目次

AddTileFlags

指定された位置のタイルにフラグを追加します

using UnityEngine;
using UnityEngine.Tilemaps;

public class Example : MonoBehaviour
{
    private void Awake()
    {
        var tilemap = GetComponent<Tilemap>();
        var position = new Vector3Int( 0, 0, 0 );
        tilemap.AddTileFlags( position, TileFlags.LockAll );
    }
}

BoxFill

指定された範囲を指定されたタイルで塗りつぶします

using UnityEngine;
using UnityEngine.Tilemaps;

public class Example : MonoBehaviour
{
    public TileBase tile;

    private void Awake()
    {
        var tilemap = GetComponent<Tilemap>();
        var position = new Vector3Int( 0, 0, 0 );
        tilemap.BoxFill( position, tile, -5, -5, 5, 5 );
    }
}

ClearAllTiles

配置されているタイルをすべて削除します

using UnityEngine;
using UnityEngine.Tilemaps;

public class Example : MonoBehaviour
{
    private void Awake()
    {
        var tilemap = GetComponent<Tilemap>();
        tilemap.ClearAllTiles();
    }
}

CompressBounds

タイルマップの原点とサイズをタイルが配置されている領域に合わせて調整します

using UnityEngine;
using UnityEngine.Tilemaps;

public class Example : MonoBehaviour
{
    private void Awake()
    {
        var tilemap = GetComponent<Tilemap>();
        tilemap.CompressBounds();
    }
}

ContainsTile

指定されたタイルが配置されている場合 true を返します

using UnityEngine;
using UnityEngine.Tilemaps;

public class Example : MonoBehaviour
{
    public TileBase tile;

    private void Awake()
    {
        var tilemap = GetComponent<Tilemap>();
        print( tilemap.ContainsTile( tile ) );
    }
}

GetCellCenterLocal

ローカル座標系におけるセルの中心位置を返します

using UnityEngine;
using UnityEngine.Tilemaps;

public class Example : MonoBehaviour
{
    private void Awake()
    {
        var tilemap = GetComponent<Tilemap>();
        var position = new Vector3Int( 1, 1, 0 );
        print( tilemap.GetCellCenterLocal( position ) );
    }
}

GetCellCenterWorld

ワールド座標系におけるセルの中心位置を返します

using UnityEngine;
using UnityEngine.Tilemaps;

public class Example : MonoBehaviour
{
    private void Awake()
    {
        var tilemap = GetComponent<Tilemap>();
        var position = new Vector3Int( 1, 1, 0 );
        print( tilemap.GetCellCenterWorld( position ) );
    }
}

GetColliderType

指定された位置のタイルの当たり判定の種類を返します

using UnityEngine;
using UnityEngine.Tilemaps;

public class Example : MonoBehaviour
{
    private void Awake()
    {
        var tilemap = GetComponent<Tilemap>();
        var position = new Vector3Int( 0, 0, 0 );
        print( tilemap.GetColliderType( position ) );
    }
}

GetColor

指定された位置のタイルの色を返します

using UnityEngine;
using UnityEngine.Tilemaps;

public class Example : MonoBehaviour
{
    private void Awake()
    {
        var tilemap = GetComponent<Tilemap>();
        var position = new Vector3Int( 0, 0, 0 );
        print( tilemap.GetColor( position ) );
    }
}

GetInstantiatedObject

指定された位置のタイルのゲームオブジェクトを返します

using UnityEngine;
using UnityEngine.Tilemaps;

public class Example : MonoBehaviour
{
    private void Awake()
    {
        var tilemap = GetComponent<Tilemap>();
        var position = new Vector3Int( 0, 0, 0 );
        print( tilemap.GetInstantiatedObject( position ) );
    }
}

GetSprite

指定された位置のタイルのスプライトを返します

using UnityEngine;
using UnityEngine.Tilemaps;

public class Example : MonoBehaviour
{
    private void Awake()
    {
        var tilemap = GetComponent<Tilemap>();
        var position = new Vector3Int( 0, 0, 0 );
        print( tilemap.GetSprite( position ) );
    }
}

GetTile

指定された位置のタイルを返します

using UnityEngine;
using UnityEngine.Tilemaps;

public class Example : MonoBehaviour
{
    private void Awake()
    {
        var tilemap = GetComponent<Tilemap>();
        var position = new Vector3Int( 0, 0, 0 );
        print( tilemap.GetTile( position ) );
    }
}

GetTileFlags

指定された位置のタイルのフラグを返します

using UnityEngine;
using UnityEngine.Tilemaps;

public class Example : MonoBehaviour
{
    private void Awake()
    {
        var tilemap = GetComponent<Tilemap>();
        var position = new Vector3Int( 0, 0, 0 );
        print( tilemap.GetTileFlags( position ) );
    }
}

GetTilesBlock

指定された範囲に存在するタイルを配列で返します

using UnityEngine;
using UnityEngine.Tilemaps;

public class Example : MonoBehaviour
{
    private void Awake()
    {
        var tilemap = GetComponent<Tilemap>();
        var bounds = new BoundsInt( -3, -3, 0, 6, 6, 1 );
        var list = tilemap.GetTilesBlock( bounds );

        print( list.Length );

        foreach ( var n in list )
        {
            print( n );
        }
    }
}

GetUsedTilesCount

使用されているタイルの数を返します

using UnityEngine;
using UnityEngine.Tilemaps;

public class Example : MonoBehaviour
{
    private void Awake()
    {
        var tilemap = GetComponent<Tilemap>();
        print( tilemap.GetUsedTilesCount() );
    }
}

HasTile

指定された位置にタイルが存在する場合 true を返します

using UnityEngine;
using UnityEngine.Tilemaps;

public class Example : MonoBehaviour
{
    private void Awake()
    {
        var tilemap = GetComponent<Tilemap>();
        var position = new Vector3Int( 0, 0, 0 );
        print( tilemap.HasTile( position ) );
    }
}

RefreshAllTiles

すべてのタイルに関連するコンポーネントの状態を更新します

using UnityEngine;
using UnityEngine.Tilemaps;

public class Example : MonoBehaviour
{
    private void Awake()
    {
        var tilemap = GetComponent<Tilemap>();
        tilemap.RefreshAllTiles();
    }
}

RefreshTile

指定された位置のタイルに関連するコンポーネントの状態を更新します

using UnityEngine;
using UnityEngine.Tilemaps;

public class Example : MonoBehaviour
{
    private void Awake()
    {
        var tilemap = GetComponent<Tilemap>();
        var position = new Vector3Int( 0, 0, 0 );
        tilemap.RefreshTile( position );
    }
}

RemoveTileFlags

指定された位置のタイルからフラグを削除します

using UnityEngine;
using UnityEngine.Tilemaps;

public class Example : MonoBehaviour
{
    private void Awake()
    {
        var tilemap = GetComponent<Tilemap>();
        var position = new Vector3Int( 0, 0, 0 );
        tilemap.RemoveTileFlags( position, TileFlags.LockAll );
    }
}

SetColliderType

指定された位置のタイルの当たり判定の種類を設定します

using UnityEngine;
using UnityEngine.Tilemaps;

public class Example : MonoBehaviour
{
    private void Awake()
    {
        var tilemap = GetComponent<Tilemap>();
        var position = new Vector3Int( 0, 0, 0 );
        tilemap.SetColliderType( position, Tile.ColliderType.Sprite );
    }
}

SetColor

指定された位置のタイルの色を設定します

using UnityEngine;
using UnityEngine.Tilemaps;

public class Example : MonoBehaviour
{
    private void Awake()
    {
        var tilemap = GetComponent<Tilemap>();
        var position = new Vector3Int( 0, 0, 0 );
        tilemap.SetColor( position, Color.red );
    }
}

SetTile

指定された位置のタイルを設定します

using UnityEngine;
using UnityEngine.Tilemaps;

public class Example : MonoBehaviour
{
    public TileBase tile;

    private void Awake()
    {
        var tilemap = GetComponent<Tilemap>();
        var position = new Vector3Int( 0, 0, 0 );
        tilemap.SetTile( position, tile );
    }
}

SetTileFlags

指定された位置のタイルのフラグを設定します

using UnityEngine;
using UnityEngine.Tilemaps;

public class Example : MonoBehaviour
{
    private void Awake()
    {
        var tilemap = GetComponent<Tilemap>();
        var position = new Vector3Int( 0, 0, 0 );
        tilemap.SetTileFlags( position, TileFlags.LockAll );
    }
}

SetTiles

配列を使用して指定された位置のタイルを設定します
positionArray と tileArray の長さは等しい必要があります

using UnityEngine;
using UnityEngine.Tilemaps;

public class Example : MonoBehaviour
{
    public TileBase[] tileArray;

    private void Awake()
    {
        var tilemap = GetComponent<Tilemap>();
        var positionArray = new []
        {
            new Vector3Int( 0, 0, 0 ),
            new Vector3Int( 1, 0, 0 ),
            new Vector3Int( 2, 0, 0 ),
        };
        tilemap.SetTiles( positionArray, tileArray );
    }
}

SetTilesBlock

指定された範囲をタイルの配列で塗りつぶします

using UnityEngine;
using UnityEngine.Tilemaps;

public class Example : MonoBehaviour
{
    public TileBase[] tileArray;

    private void Awake()
    {
        var tilemap = GetComponent<Tilemap>();
        var bounds = new BoundsInt( 0, 0, 0, 3, 1, 1 );
        tilemap.SetTilesBlock( bounds, tileArray );
    }
}

SwapTile

指定されたタイルを入れ替えます

using UnityEngine;
using UnityEngine.Tilemaps;

public class Example : MonoBehaviour
{
    public TileBase changeTile;
    public TileBase newTile;

    private void Awake()
    {
        var tilemap = GetComponent<Tilemap>();
        tilemap.SwapTile( changeTile, newTile );
    }
}

関連記事