Index
Tilemap クラス
Tilemap クラスを使うには、名前空間に次を追加する必要があります。
using UnityEngine.Tilemaps;
このクラスの関数を使うとき、Tilemap や TileBase を使用します。具体的な説明は下記の Tilemap.SetTile の説明をご覧ください。
Tilemap.SetTile
第一引数で指定した position に第二引数で指定した tile を設置します。
public void SetTile (Vector3Int position, Tilemaps.TileBase tile);
(例)
using UnityEngine; using UnityEngine.Tilemaps; public class TileScript : MonoBehaviour { public Tilemap tilemap; public TileBase tile; void Start() { tilemap.SetTile(Vector3Int.zero, tile); } }
Tilemap や TileBase は Inspector から取得します。
Tilemap は Tilemap コンポーネントを持ったオブジェクトから取得しています。TileBase は TilePallete に Sprite を追加したときに、作られる Tile になります。
Tilemap.SetTiles
複数のタイルを設置するための関数です。第一引数に設置する position を配列で指定します。第二引数は設置するタイルを指定します。
positionArray と tileArray の長さは同じ必要があります。
public void SetTiles (Vector3Int[] positionArray, TileBase[] tileArray);
(例)
using UnityEngine; using UnityEngine.Tilemaps; public class TileScript : MonoBehaviour { public Tilemap tilemap; public TileBase[] tiles; void Start() { Vector3Int[] positions = new Vector3Int[tiles.Length]; int num = 0; for (int i = 2; i >= 0; i--) { for (int j = 0; j < 3; j++) { positions[num] = new Vector3Int(j, i, 0); num++; } } //タイルを設置する tilemap.SetTiles(positions, tiles); } }
(実行結果)
Tilemap.GetTile
指定された位置のタイルを返します。
public Tilemaps.TileBase GetTile (Vector3Int position);
(例)
using UnityEngine; using UnityEngine.Tilemaps; public class TileScript : MonoBehaviour { public Tilemap tilemap; public TileBase tile; void Start() { tilemap.SetTile(Vector3Int.zero, tile); //(0, 0, 0)の位置にあるタイルを取得 TileBase settedTile = tilemap.GetTile(Vector3Int.zero); Debug.Log(settedTile); } }
Tilemap.SetTilesBlock
第一引数で指定された範囲に第二引数で指定されたタイルを設置します。
public void SetTilesBlock (BoundsInt position, TileBase[] tileArray);
using UnityEngine; using UnityEngine.Tilemaps; public class TileScript : MonoBehaviour { public Tilemap tilemap; public TileBase tile; void Start() { //BoundsIntで範囲指定 BoundsInt area = new BoundsInt(-2, -2, 0, 4, 4, 1); TileBase[] tiles = new TileBase[area.size.x * area.size.y * area.size.z]; //タイルの個数を定義 for (int i = 0; i < tiles.Length; i++) { tiles[i] = tile; } //範囲内にタイルを設置 tilemap.SetTilesBlock(area, tiles); } }
最後に
マップの自動生成をする場合には、スクリプトから Tile を設置する必要があると思います。