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

Como fazer uma array selecionar um determinado valor ao executar uma ação?

Basicamente, tenho que fazer um sistema de lançamento, e nesse sistema eu tenho a parte da rotação do canhão e quando essa rotação for X é pra ele inserir um valor da array mas não estou conseguindo fazer isso porque ele ja pula para o ultimo valor da array quando aperto o Q

O código não esta inteiro, coloquei apenas o que precisava para o problema

int[] valorX = { 400, 450 };
int[] valorY = { 300, 300 };
public float ForcaTotalX, ForcaTotalY;
public float forcaX, forcaY;

void mudaForca()
{
     if (Input.GetKeyDown(KeyCode.Q))
    {
        for (int i = 0; i <= 14; i++)
        {
            forcaX = valorX[0 + i];
            forcaY = valorY[0 + i];
        }
    }
    ForcaTotalX = forcaX + 300f;
    ForcaTotalY = forcaY;
}

void lancamento()
{
        disparo.AddForce(new Vector2(ForcaTotalX, ForcaTotalY));
}
3 respostas

Oi, José, tudo bem?

Deixa eu ver se entendi o problema. Você quer rotacionar o canhão e dependendo do valor de rotação mudar a força do tiro, é isso?

Tipo: menos de 30° tem a força X e mais de 30° tem a força Y seria mais ou menos isso?

Mais ou menos, sempre que eu apertar o Q ele vai girar por exemplo 5°, e ai por conta disso eu quero alterar o valor da força que vai atirar então ficaria assim

Se esta em 0° X= 300 Y=0

5° X= 400 Y= 300

10° X=450 Y=300

solução!

Então é que esse uso de for se cair no Update não é tão legal porque ele vai rodar o for todo quando apertar o botão ao invés do que você quer de aumentar 1 no index que é o que você quer.

Você pode tirar essa lógica do Update e usar só quando necessário que é quando o botão é pressionado, exemplo:


int[] valorX = { 400, 450 };
int[] valorY = { 300, 300 };
public float ForcaTotalX, ForcaTotalY;
public float forcaX, forcaY;
int index = 0;

void Update () 
{
    if (Input.GetKeyDown(KeyCode.Q))
    {
          MudarForca();
    }
}

void MudarForca()
{
    index++;
    forcaX = valorX[index];
    forcaY = valorY[index];
    ForcaTotalX = forcaX + 300f;
    ForcaTotalY = forcaY;
}

void Lancamento()
{
    disparo.AddForce(new Vector2(ForcaTotalX, ForcaTotalY));
}

Fiz algo mais simples baseado na sua lógica, agora se você me perguntar como eu implementaria talvez eu pegasse o ângulo do objeto dividiria pelo incremento que é de e teria o index.

Mas claro tudo depende do contexto estou só divagando hehe

Importante é botar pra funcionar numa versão mais simples primeiro e depois você vai melhorando a medida que for incrementando o jogo.