如何在Unity中自动创建交替棋盘格瓦片图案?
Unity实现自动黑白交替棋盘格瓦片的方法
方法一:自定义Checkerboard Tile(推荐,支持实时刷绘)
直接创建自定义Tile类,通过瓦片在Grid中的坐标奇偶性自动切换黑白Sprite,刷绘时自动实现交替效果:
- 创建C#脚本
CheckerboardTile.cs,代码如下:
using UnityEngine; using UnityEngine.Tilemaps; [CreateAssetMenu(fileName = "CheckerboardTile", menuName = "Tiles/Checkerboard Tile")] public class CheckerboardTile : Tile { public Sprite blackSprite; public Sprite whiteSprite; public override void GetTileData(Vector3Int position, ITilemap tilemap, ref TileData tileData) { base.GetTileData(position, tilemap, ref tileData); // 通过坐标和的奇偶性判断使用哪种Sprite tileData.sprite = (position.x + position.y) % 2 == 0 ? whiteSprite : blackSprite; } }
- 在Project窗口右键选择
Tiles/Checkerboard Tile,创建自定义Tile实例。 - 选中该Tile实例,在Inspector面板拖入黑白两种Sprite。
- 打开Tile Palette,将自定义Tile拖入面板,之后在Tilemap上刷绘时,会自动根据坐标生成交替棋盘格。
方法二:批量生成棋盘格(适合一次性创建场景)
如果需要一次性生成整个棋盘区域,可使用脚本批量设置瓦片:
- 创建C#脚本
CheckerboardGenerator.cs:
using UnityEngine; using UnityEngine.Tilemaps; public class CheckerboardGenerator : MonoBehaviour { public Tilemap targetTilemap; public Tile blackTile; public Tile whiteTile; public int gridWidth = 10; public int gridHeight = 10; // 在Inspector右键菜单触发生成 [ContextMenu("Generate Checkerboard")] public void GenerateCheckerboard() { targetTilemap.ClearAllTiles(); // 遍历坐标范围,根据奇偶设置瓦片 for (int x = 0; x < gridWidth; x++) { for (int y = 0; y < gridHeight; y++) { Vector3Int tilePos = new Vector3Int(x, y, 0); targetTilemap.SetTile(tilePos, (x + y) % 2 == 0 ? whiteTile : blackTile); } } } }
- 将脚本挂载到包含Tilemap的GameObject上,在Inspector面板指定目标Tilemap、黑白Tile,以及棋盘的宽高。
- 选中挂载脚本的物体,在Inspector面板点击右上角三点按钮,选择
Generate Checkerboard,即可生成完整的交替棋盘格。
补充:关于Rule Tile的替代思路
Rule Tile本身更适合依赖相邻瓦片的规则,棋盘格不需要检测相邻,所以上述两种方法更直接。如果一定要用Rule Tile,可自定义规则脚本将坐标奇偶性作为判断条件,但相比自定义Tile会更繁琐,不推荐。
内容的提问来源于stack exchange,提问作者Phillip Zoghbi
相关产品推荐
相关产品推荐

