Buttermilch Geschrieben 17. Mai 2018 Melden Share Geschrieben 17. Mai 2018 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: 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: 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; } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
PierreDo Geschrieben 19. Mai 2018 Melden Share Geschrieben 19. Mai 2018 Ich finde, dein Code ist schwer zu lesen. Vieles muß ich erahnen, was die Sache nicht gerade angenehm macht. Ich schließe aus deinem Screenshot, daß exakt ein Feld zu viel zerstört wird. Heißt, du mußt einen Wert -1 nehmen, dann sollte es klappen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.