Параметры
position | Положение плитки на карте плиток. |
tilemap | Tilemap, на которой присутствует тайл.. |
Описание
Этот метод вызывается при обновлении плитки.
Реализуйте это и вызовите Tilemap.RefreshTile для всех затрагиваемых плиток на Tilemap, включая плитку в заданной позиции, чтобы обновить их. Это также полезно, если размещение плитки влияет на свойства соседних плиток.
using UnityEngine;
using UnityEngine.Tilemaps;
// Tile that displays a Sprite when it is alone and a different Sprite when it is orthogonally adjacent to the same NeighourTile
[CreateAssetMenu]
public class NeighbourTile : TileBase
{
public Sprite spriteA;
public Sprite spriteB;
public override void RefreshTile(Vector3Int position, ITilemap tilemap)
{
for (int yd = -1; yd <= 1; yd++)
{
Vector3Int location = new Vector3Int(position.x, position.y + yd, position.z);
if (IsNeighbour(location, tilemap))
tilemap.RefreshTile(location);
}
for (int xd = -1; xd <= 1; xd++)
{
Vector3Int location = new Vector3Int(position.x + xd, position.y, position.z);
if (IsNeighbour(location, tilemap))
tilemap.RefreshTile(location);
}
}
public override void GetTileData(Vector3Int position, ITilemap tilemap, ref TileData tileData)
{
tileData.sprite = spriteA;
for (int yd = -1; yd <= 1; yd += 2)
{
Vector3Int location = new Vector3Int(position.x, position.y + yd, position.z);
if (IsNeighbour(location, tilemap))
tileData.sprite = spriteB;
}
for (int xd = -1; xd <= 1; xd += 2)
{
Vector3Int location = new Vector3Int(position.x + xd, position.y, position.z);
if (IsNeighbour(location, tilemap))
tileData.sprite = spriteB;
}
}
private bool IsNeighbour(Vector3Int position, ITilemap tilemap)
{
TileBase tile = tilemap.GetTile(position);
return (tile != null && tile == this);
}
}