РЕДАКТИРОВАТЬ: Эта проблема была решена.
Я делаю 2D RPG игру в Unity. Мне нужно обнаружение комнаты ... поэтому я хотел бы получить все плитки из большего количества плиток и объединить их в один массив в сценарии. У меня проблема, потому что не все плитки импортированы. Например, он импортирует 11 дверей вместо 30.
Мой код C #:
public class RoomController : MonoBehaviour{
public Tilemap floor;
public Tilemap walls;
public Tilemap doors;
public WorldGraph worldGraph;
public List<Room> rooms;
Queue<ClonedTile> queue;
// Start is called before the first frame update
void Start()
{
rooms = new List<Room>();
rooms.Add( new Room() );
UnityEngine.Debug.Log( "Rooms: " + rooms.Count );
worldGraph = new WorldGraph(walls.cellBounds.size.x, walls.cellBounds.size.y, walls, floor, doors, this);
}
Это мой класс worldGraph:
public class WorldGraph {
public ClonedTile[,] tiles;
Tilemap walls;
Tilemap floor;
Tilemap door;
Dictionary<ClonedTile, TileBase> originalTiles;
public int width;
public int height;
RoomController roomController;
public WorldGraph(int width, int height, Tilemap walls, Tilemap floor, Tilemap door, RoomController roomController ) {
tiles = new ClonedTile[width, height];
this.walls = walls;
this.floor = floor;
this.door = door;
this.width = width;
this.height = height;
this.roomController = roomController;
Debug.Log( width + " " + height );
originalTiles = new Dictionary<ClonedTile, TileBase>();
ImportTiles();
// This is the place, where I import all tiles.
public void ImportTiles() {
for(int y = 0; y<height; y++ ) {
for(int x = 0; x<width; x++ ) {
Vector3Int pos = new Vector3Int( x, y, 0 );
TileBase tile = floor.GetTile(pos);
if(tile!= null ) {
tiles[x, y] = new ClonedTile( x, y, TileType.Floor, false );
}
if(tile == null ) {
tiles[x, y] = new ClonedTile( x, y, TileType.Empty, false );
}
tile = walls.GetTile( pos );
if (tile != null ) {
tiles[x, y] = new ClonedTile( x, y, TileType.Wall, true );
}
tile = door.GetTile( pos );
if(tile!= null ) {
tiles[x, y] = new ClonedTile( x, y, TileType.Door, true );
}
}
}
int wallnumber = 0;
int floornumber = 0;
int doornumber = 0;
int emptynumber = 0;
foreach (ClonedTile t in tiles ) {
t.roomController = roomController;
roomController.GetOutsideRoom().Tiles.Add( t );
t.hasRoom = false;
switch ( t.type ) {
case TileType.Wall:
wallnumber++;
break;
case TileType.Door:
doornumber++;
break;
case TileType.Floor:
floornumber++;
break;
default:
emptynumber++;
break;
}
}
Debug.Log( "Walls: " + wallnumber + " Floor: " + floornumber + " Doors: " + doornumber + " Empty: " + emptynumber );
}
}
Я был бы рад любомупредложения.