U3L12-7——Tilemap代码控制相关

本章关键字

1
2
3
4
5
6
7
8
9
UnityEngine.Tilemaps       //Tilemap相关所需的命名空间
Tilemap //瓦片地图信息 可以通过它得到瓦片格子
Grid //格子位置相关控制 可以通过它 进行坐标转换
TileBase //瓦片资源对象基类
tilemap.ClearAllTiles() //清空瓦片地图
tilemap.SetTile(,) //设置某个格子位置的瓦片
tilemap.SetTiles(,) //设置多个格子位置的多个瓦片
tilemap.SwapTile(,) //批量替换某种瓦片
grid.WorldToCell() //世界坐标转换为格子坐标

获取Tilemap和TileBase和Grid

  • Tilemap组件:用于管理瓦片地图
    瓦片地图信息 可以通过它得到瓦片格子
  • TileBase组件:瓦片资源对象基类
    瓦片资源基类通过它可以得到瓦片资源
  • Grid组件:用于坐标转换
    格子位置相关控制 可以通过它 进行坐标转换

使用他们需要引用命名空间

1
2
3
4
5
6
7
8
9
using UnityEngine;
using UnityEngine.Tilemaps;

public class Lesson28 : MonoBehaviour
{
public Tilemap tilemap;
public Grid grid;
public TileBase tileBase;
}

重要API

清空瓦片地图

1
tilemap.ClearAllTiles();

获取指定坐标格子

注意!这里要用Vector3Int而不是Vector3

1
2
TileBase tile = tilemap.GetTile(new Vector3Int(0, 0, 0));
print(tile);

设置删除瓦片

1
2
tilemap.SetTile(Vector3Int.zero, tileBase);
tilemap.SetTile(new Vector3Int(0, -1, 0), null);

设置多个瓦片

可以通过数组设置多个位置的瓦片,两个数组之间一一对应

1
2
3
Vector3Int[] positions = new Vector3Int[2] { new Vector3Int(1, -1, 0), new Vector3Int(1, -2, 0) };
TileBase[] tileBases = new TileBase[2] { tileBase, tile };
tilemap.SetTiles(positions, tileBases);

批量替换瓦片

得到地图上的某一种瓦片,将其全部替换为另一种瓦片(参数一:将被替换的瓦片,参数二:新的瓦片)

1
tilemap.SwapTile(tile, tileBase);

坐标转换

世界坐标转格子坐标

1
grid.WorldToCell(Vector3.zero)

屏幕坐标转格子坐标

首先要将屏幕坐标转为世界坐标,再将世界坐标转为格子坐标

1
2
3
4
5
void Update()
{
Vector3 worldPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
print(grid.WorldToCell(worldPos));
}