Olá, pessoal. Neste tutorial, darei continuidade a série sobre a mecânica de Connect 3 com C#, mostrando como montar o Grid e a preparação dos Itens no editor.
Essa é a terceira parte da série. Sendo assim, antes de começarmos, é extremamente importante que você tenha visto a duas anteriores: parte 01 e parte 02.
Agora sim tudo OK. Vamos direto ao ponto.
Mãos ao Script do Connect 3 com C#
Primeiramente devemos ter uma cena básica com apenas a câmera. Sendo assim, remova qualquer vestígio de GameObjects que tenha ficado dos tutoriais anteriores. Afinal, nossos itens devem estar todos como prefabs.
Agora crie um novo GameObject, troque seu nome para LevelController e um script C#. Chame-o de LevelBehaviourScript que deve ser adicionado ao LevelController.
Agora no LevelBehavourScript vamos definir um array, cujo objetivo é receber os prefabs dos itens e dois inteiros para definirmos o tamanho do grid.
public array itens; public int colunas = 6; public int linhas = 6;
Precisaremos também de uma lista para adicionar os Itens que foram selecionados. Contudo esta deve ser privada e em outro array, sendo agora bidimensional para representar nosso grid.
private List<ItemBehaviourScript> ItensSelecionados = new List<ItemBehaviourScript>();
Agora vamos pensar nas ações que o sprite precisará executar:
Primeiro precisamos carregar o grid de acordo com o tamanho estipulado(Montar o Grid). Ainda, para cada posição do grid, colocamos um de nossos itens oriundos do array de prefabs (Pegar Item). Com nosso grid pronto, teremos que manipular o toque na tela (Manipular o Toque) e, por fim, remover os Itens selecionados.
Agora vamos escrevê-los.
Configurando os eventos
Na nossa classe TouchBehaviourScript definimos duas Actions: uma para quando o item é encontrado e outro quando o toque chega ao fim. Vamos definir os manipuladores desses Actions.
Usaremos o Start para fazer essa configuração.
void Start() { TouchBehaviourScript.OnTouchEnd = ManipulaToque; TouchBehaviourScript.OnTouchableFound = ManipulaSoltar; }
Pegando o Item
Aqui, para obter uma instância do Item: o index do array.
private ItemBehaviourScript PegarItem(int index){ ItemBehaviourScript item = Instantiate<ItemBehaviourScript>(itens[index]); item.id = index; return item; }
Montando o Grid
Nesse ponto devemos fazer um encadeamento de “for” para alimentarmos nosso array do grid, randomizando um prefab para cada posição.
Também devemos configurar a “position” do “transform” do item.
private void MontarGrid() { for(int x = 0; x < colunas; x++) { for(int y = 0; y < linhas; y++) { int randIndex = Random.Range(0,itens.Length); ItemBehaviourScript item = PegarItem(randIndex); item.transform.position = new Vector2(x,y); item.gameObject.SetActive(true); } } }
Manipulando o Toque
Vamos criar um método que recebe o item enviado pelo script do toque. Nele devemos verificar se a nossa lista de itens selecionados não está vazia ou se o item faz fronteira com o último item adicionado a lista.
private void ManipulaToque(ItemBehaviourScript itemSelecionado) { if(ItensSelecionados.Count > 0){ ItemBehaviourScript ultimoItem = ItensSelecionados[ItensSelecionados.Count - 1]; if((Math.Abs(itemSelecionado.x - ultimoItem.x) == 1) & (itemSelecionado.y - ultimoItem.y == 0)) | //eixo y ((itemSelecionado.x - ultimoItem.x == 0) & (Math.Abs(itemSelecionado.y - ultimoItem.y) == 1)) { itemSelecionado.Selecionar(); ItensSelecionados.add(itemSelecionado); } }else{ itemSelecionado.Selecionar(); ItensSelecionados.add(itemSelecionado); } }
Removendo a Seleção
E por fim ouvindo o evento de “soltar”, removeremos a lista de selecionados caso seja uma lista válida, ou seja, com mais de 2 itens. E em todos os casos limpamos a lista.
private void ManipulaSoltar() { if(ItensSelecionados.Count > 2) { foreach(ItemBehaviourScript item in ItensSelecionados) { item.gameObject.setActive(false); } } ItensSelecionados.Clear(); }
Então é isso. Terminamos nosso Connect 3 com C# em Unity3D.
Espero que esse exemplo lhes sirva como base para futuros projetos. Até a próxima.