如何统一删除瓦片地图中的瓦片?

问题描述 投票:0回答:1

我有一个图块地图(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);
    }
unity-game-engine 2d
1个回答
0
投票

我所做的是循环遍历一个带有半径边的盒子内的所有图块,然后检查距离使其成为一个圆。如果这听起来令人困惑,那么这是我的代码。有点乱,但它完成了工作。

        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);
            }
        }
    }

希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.