public List <MapItem> mapItems; //Uma lista pra ter controle sobre todos os tiles do mapa. public void GenerateGrid() //Esse método é o que cria o mapa { foreach (MapItem g in mapItems) //Se você gerar o mapa 2 vezes, essa parte do código vai destruir os sprites antes de faze-los de novo. //Caso contrário você geraria 200 sprites, depois mais 200, e mais 200, e aí caga tudo. { Destroy(g.gameObject); } mapItems.Clear(); //Aqui o mapa tá sendo criado. Varre x e y for (int i = 0; i < gridSize.x; i++) { for (int j = 0; j < gridSize.y; j++) { //Instancia o prefab, posiciona ele. //o sprite 1x1 fica na posicao 0, 0. o 1x2 fica na posicao 0, 0.46 //o sprite 2x2 fica na posicao 0.46, 0.46 e assim vai. MapItem mapItem = GameObject.Instantiate(mapItemPrefab, new Vector2(i * pixelSize, j * pixelSize), Quaternion.identity); mapItem.transform.parent = transform; //coloco todos os sprites gerados dentro dum objeto, pra deixar organizado. mapItems.Add(mapItem); //adiciono à lista de referencias mapItem.ConfigureSelf(); // chamo o método que vai trocar a sprite (colocar a sprite de porta no item que é do tipo porta //colocar sprite de parede no item que é do tipo parede, etc. //Depois veja o código MapItem pra ver como isso é feito. Ele também tem um código de editor, o _editorMapItem } } }
//Mesmo esquema do _editorMapGenerator. public override void OnInspectorGUI() { DrawDefaultInspector(); MapItem mapItem = (MapItem)target; if (GUILayout.Button("Configure Self")) { mapItem.ConfigureSelf(); } }