參考網站:https://blog.csdn.net/pz789as/article/details/79540890
tilemap大小設置
方法1:

Grid的Cell Size = 圖片像素 * 0.01 同時圖片的Pixels Per為100
方法2:
Grid的Cell Size 為 1 ,圖片的Pixels Per = 圖片像素寬高

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Tilemaps; public class CreateTileMap : MonoBehaviour { public Tilemap tilemap;//引用的Tilemap public Tile baseTile;//使用的最基本的Tile,我這里是白色塊,然后根據數據設置不同顏色生成不同Tile Tile[] arrTiles;//生成的Tile數組 void Awake() { //ins = this; } void Start() { StartCoroutine(InitData()); } void Update() { //銷毀牆體 if (Input.GetMouseButtonDown(0)) { Vector3 mousePosition = Input.mousePosition; Vector3 wordPosition = Camera.main.ScreenToWorldPoint(mousePosition); Vector3Int cellPosition = tilemap.WorldToCell(wordPosition); //tilemap.SetTile(cellPosition, gameUI.GetSelectColor().colorData.mTile); TileBase tb = tilemap.GetTile(cellPosition); if (tb == null) { return; } //tb.hideFlags = HideFlags.None; Debug.Log("鼠標坐標" + mousePosition + "世界" + wordPosition + "cell" + cellPosition + "tb" + tb.name); //某個地方設置為空,就是把那個地方小格子銷毀了 tilemap.SetTile(cellPosition, null); //tilemap.RefreshAllTiles(); } //空白地方創造牆體 if (Input.GetMouseButtonDown(1)) { Vector3 mousePosition = Input.mousePosition; Vector3 wordPosition = Camera.main.ScreenToWorldPoint(mousePosition); Vector3Int cellPosition = tilemap.WorldToCell(wordPosition); //tilemap.SetTile(cellPosition, gameUI.GetSelectColor().colorData.mTile); TileBase tb = tilemap.GetTile(cellPosition); if (tb != null) { return; } //tb.hideFlags = HideFlags.None; //Debug.Log("鼠標坐標" + mousePosition + "世界" + wordPosition + "cell" + cellPosition + "tb" + tb.name); //格子填充 tilemap.SetTile(cellPosition, baseTile); //tilemap.RefreshAllTiles(); } } /// <summary> /// 地圖生成 /// </summary> /// <returns></returns> IEnumerator InitData() { //大地圖寬高 int levelW = 10; int levelH = 10; int colorCount = 6; arrTiles = new Tile[colorCount]; for (int i = 0; i < colorCount; i++) { //想做生命牆,需要自己做個數據層,對應索引id就行 arrTiles[i] = ScriptableObject.CreateInstance<Tile>();//創建Tile,注意,要使用這種方式 arrTiles[i].sprite = baseTile.sprite; arrTiles[i].color = new Color(Random.Range(0f, 1f), Random.Range(0f, 1f), Random.Range(0f, 1f), 1); } for (int i = 0; i < levelH; i++) {//這里就是設置每個Tile的信息了 for (int j = 0; j < levelW; j++) { tilemap.SetTile(new Vector3Int(j, i, 0), arrTiles[Random.Range(0, arrTiles.Length)]); } yield return null; } while (true) { yield return new WaitForSeconds(2); // int colorIdx = Random.Range(0, colorCount);//前面這個是隨機將某個塊的顏色改變,然后讓Tilemap更新,主要用來更新Tile的變化 // arrTiles[colorIdx].color = new Color(Random.Range(0f, 1f), Random.Range(0f,1f), Random.Range(0f, 1f), 1); // tilemap.RefreshAllTiles(); Color c = tilemap.color;//這里是改變Tilemap的顏色,嘗試是否可以整體變色 c.a -= Time.deltaTime; tilemap.color = c; } } }
