我有一个图块地图(Tl),当火箭击中它时,一定半径内的图块应该被破坏。
我尝试使用 GetTilesBlock 和 Destroy 函数获取图块,但它不起作用
public void OnCollisionEnter2D(Collision2D collision)
{
int posx = (int)transform.position.x;
int posy = (int)transform.position.y;
int posz = (int)transform.position.z;
Vector3Int pos = new Vector3Int(posx, posy, posz);
Vector3Int radiusBox = new Vector3Int(3, 3, 3);
BoundsInt Box = new BoundsInt(pos, radiusBox);
TileBase[] tiles = Tl.GetTilesBlock(Box);
foreach(TileBase x in tiles)
{
Destroy(x);
}
Destroy(gameObject);
}
我所做的是循环遍历一个带有半径边的盒子内的所有图块,然后检查距离使其成为一个圆。如果这听起来令人困惑,那么这是我的代码。有点乱,但它完成了工作。
Vector2 pos = transform.position; //center of the circle
ground = FindAnyObjectByType<Tilemap>();//Get the tilemap
for (int x = -ExplosionRadius; x < ExplosionRadius; x++)
{
for (int y = -ExplosionRadius; y < ExplosionRadius; y++) //find the box
{
Vector3Int Tilepos = ground.WorldToCell(new Vector2(pos.x + x, pos.y + y));
if (Vector3.Distance(pos, Tilepos) <= ExplosionRadius) //check distance to make it a circle
{
ground.SetTile(Tilepos, null);
}
}
}
希望这有帮助。