Solucionado (ver solução)
Solucionado
(ver solução)
9
respostas

Melhorar uso dos botões na Unity

Tenho dois botões que fazem a mesma coisa, há alguma forma de reconhecer qual botão foi apertado sem precisar declarar cada um dos botões?

Código atual:

[SerializeField] private Button[] botaoLetra; //Todos os botões são colocados dentro do array

//Cria-se uma função para cada botão (elas fazem exatamente a mesma coisa)
public void letraAPressionada()
    {
        if (botaoLetra[0].image.color == Color.grey)
        {
            Debug.Log("Já precionado");
        }

        botaoLetra[0].image.color = Color.grey;
    }

    public void letraBPressionada()
    {
        if (botaoLetra[1].image.color == Color.grey)
        {
            Debug.Log("Já precionado");
        }

        botaoLetra[1].image.color = Color.grey;
    }

Teria como escrever em uma unica função? Se precisasse de 20 botões teria que por um de cada vez, mesmo eles tendo a mesma função?

9 respostas

Oi Edrei, desculpa mas não entendi. O que você quer fazer com esses botões? Qual o problema que vc está tentando resolver dentro do seu jogo?

Se vc tem dois botões que fazem a mesma coisa, vc não precisa de dois botões, só precisaria de um deles.

No script eles são exatamente iguais, porém no unity a aparência é diferente. Queria continuar com os dois botões no unity, mas só com um código para eles

São dois botões diferentes com comportamentos iguais.

Tenho dois botões no meu Canvas. Botão A e Botão B.

Quando clico no Botão A ele fica cinza, e o Botão B continua branco.

Quando clico no Botão B ele fica cinza, e o Botão A continua branco.

De qual forma poderia escrever esse código?

Tem alguma forma de passar o botão que foi apertado como parâmetro para a função?

Bom dia Edrei, vc não precisa de código para isso. Se você quer que o botão fique em um estado de "ligado/desligado" o melhor elemento pra vc utilizar é o toggle.

Para que só um toggle esteja ativo na cena vc precisa criar um ToggleGroup e configurar a propriedade group dos toggles que fazem parte do mesmo grupo.

Um grupo só permite que um toggle esteja ativo por vez.

Não conhecia essa função. Achei interessante, mas não sei consigo utiliza-lá para a o que preciso. Fiz algumas fotos de exemplo no pinterest, se puder ver: https://pin.it/cshy6vjuoic32e

A primeira foto são os botões, ainda sem serem pressionados; A segunda só alguns pressionados, para ter uma ideia do comportamento que ele deve ter. Na terceira todos os botões pressionados. Quando todos estão pressionados precisa apertar outro botão (Ultima imagem) para que eles voltem ao estado da imagem 1.

Mas se vc quer criar um teclado, pq vc quer deixar os botões pressionados?

Ele funciona como um jogo tipo stop. Casa letra só pode ser usada uma vez até que o jogo seja reiniciado. Para saber quais já foram usados estava usando esse estado de pressionado.

solução!

Vc pode usar o toggle então, só não precisa usar o toggle group.

Consegui Diminuir o uso de código passando o botão como parâmetro. Não sabia como fazia isso antes. Obrigado pela ajuda.