Jump to content
Unity Insider Forum

C# Tilemaps Problem


Buttermilch

Recommended Posts

Hallo zusammen,

ich arbeite derzeit an einem Bomberman-Game in Unity. Dafür benutze ich Tilemaps.

Mein Problem ist nun beim zerstören der Tiles, also wenn eine Bombe explodiert, dass das nachfolgende Tile ebenfalls zerstört wird.

Wenn meine Explosion-Size = 1 ist, klappt alles wunderbar.

Hier mal ein Beispiel:

5PPNuC3.png

Rot = Bombe

Gelb = Bereich der zerstört werden soll

Blau = Bereich der nicht zerstört werden soll

Wenn jetzt die Explosion-Size = 3 oder so ist, dann sieht das so aus:

l6PF0Fi.png

Rot = Bombe

Gelb = Bereich der zerstört werden soll

Grün = Bereich der nicht zerstört werden soll, aber trotzdem zerstört wird

Leider kann ich das Problem nicht selber lösen.

Hier nun mein Code den ich zum zerstören der Tiles benutze:

    public void Explode(Vector2 worldPos) {

        Vector3Int originCell = tilemap.WorldToCell(worldPos);
        ExplodeCell(originCell);

        if (ExplodeCell(originCell + new Vector3Int(1, 0, 0))) {
            for (int i = 0; i < explosionSize; i++) {
                ExplodeCell(originCell + new Vector3Int(i + 1, 0, 0));
            }
        }
                                              
        if (ExplodeCell(originCell + new Vector3Int(0, 1, 0))) {
            for (int i = 0; i < explosionSize; i++) {
                ExplodeCell(originCell + new Vector3Int(0, i + 1, 0));
            }
        }

        if (ExplodeCell(originCell + new Vector3Int(-1, 0, 0))) {
            for (int i = 0; i < explosionSize; i++) {
                ExplodeCell(originCell + new Vector3Int(-1 * (i + 1), 0, 0));
            }
        }

        if (ExplodeCell(originCell + new Vector3Int(0, -1, 0))) {

            for (int i = 0; i < explosionSize; i++) {
                ExplodeCell(originCell + new Vector3Int(0, -1 * (i + 1), 0));
            }
        }
    }

    bool ExplodeCell(Vector3Int cellPos) {

        Tile tile = tilemap.GetTile<Tile>(cellPos);

        for (int i = 0; i < wallTile.Length; i++) {
            if (tile == wallTile[i]) {
                return false;
            }
        }
                                            
        if (tile == destructibleTile) {
            // remove the tile
            tilemap.SetTile(cellPos, null);
            PlayerController.Highscore++;

        }
        if (tile == exitTile) {
            return false;
        }

        // create an explosion
        Vector3 pos = tilemap.GetCellCenterWorld(cellPos);
        Instantiate(explosionPrefab, pos, Quaternion.identity);
        explosionPlayer.GetComponent<AudioSource>().clip = explosion;
        explosionPlayer.GetComponent<AudioSource>().Play();
        return true;
    }

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Lädt...
×
×
  • Neu erstellen...