Tutorial: Mecânica de Connect 3 com C# no Unity3D – Parte 03

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.

nova-unity

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.

Allan Douglas

Allan Douglas

Allan Douglas (Redator) – Formado em Análise e Desenvolvimento de Sistemas (Estácio de Sá). Atualmente trabalha como Analista Líder na Teccenter no Recife – PE. Também desenvolve soluções WEB, Mobile e Games. É fanboy da SEGA e adora jogos de estratégia digitais ou analógicos.

Send this to a friend