3
respostas

Ainda preciso de ajuda! Deixar um item visível

Estou fazendo um sistema de inventário bem muitos para meu jogo point and click no qual tenho poucos itens e criei um item "Item1" que é uma chave e coloquei o seguinte código:

bool Chave1Inv = false;
    bool invActive;
    public GameObject Item1; 
    
void Update()
        { if (Chave1Inv == true){
            Item1.SetActive(invActive);
        }
        }   

A expectativa era que se a variável Chave1Inv se true, o item estava no inventário do player, e se false, não. invActive dizia se o inventário estava aberto ( visível na tela do player) e se estivesse e se o item estava no inventário do player ele deveria aparecer ( Item1.SetActive(invActive) ). invActive é um valor booleno que dirá ao SetActive se é para ele tornar o Item1 ( Minha Chave) ativo.

Mas quando clica na chave (já criei o comando que diz se a chave foi clica tornar Chave1Inv = true (Já declarei todas as variáveis anteriormente)

    {
        
    if (slotA == false){
            transform.position = new Vector3(277,265);
            Chave1Inv = true;
            slotA = true;
        }else{ if (slotB == false){
            transform.position = new Vector3(60,62);
            Chave1Inv = true;
            slotB = true;
        } else { if (slotC ==false){
            transform.position = new Vector3(-60,-51);
            Chave1Inv = true;
            slotC = true;
        } else {
            transform.position = new Vector3(60,-51);
            Chave1Inv = true;
            slotD = true;
        }

        }

        }
    }

Depois alguns testes cheguei a conclusão que quando eu colocava o comando :

{ if (Chave1Inv == true){
            Item1.SetActive(invActive);
        }

Ele não funcionava, não se porque o comando não funciona em alguma circunstância ou se Chave1Inv não estava tendo seu valor atribuido a true. Peço que alguém possa me ajudar a resolver esse problema. Obrigado!

3 respostas

Olá Matheus,

Primeiramente creio que precise ajustar teu bloco de código com if's e elses da seguinte forma:

    {		
        if (slotA == false) { 
            transform.position = new Vector3(277, 265);
            slotA = true;
        } else if (slotB == false) {
            transform.position = new Vector3(60, 62);
            slotB = true;
        } else if (slotC == false) {
            transform.position = new Vector3(-60, -51);
            slotC = true;
        } else {
            transform.position = new Vector3(60, -51);
            slotD = true;
        }
        
        Chave1Inv = true;
    }

Movi a atribuição de Chave1Inv para o final, pois ela sempre será igual recebendo true, mas fique à vontade pra manter o teu padrão.

Ps. Caso queira abreviar teus if's, pode utilizar if(!nomeVaríavel) que é o mesmo que if(nomeVaríavel == false) e o inverso é if(nomeVaríavel) que é o mesmo que if(nomeVaríavel == true)

Olhando no inspetor da Unity a bool Chave1Inv não está se tornando verdadeira por algum, tanto que quando eu manualmente no código a torno verdadeira tudo voltar a funcionar. Por favor, pode me ajudar a como fazer q esse valor fique true?

  1. Mesmo com as alterações citadas acima?

  2. Já debugou o código na parte em que define o valor true para a varíavel?

  3. Certifique-se de que o código não está passando pela linha bool Chave1Inv = false; após ter executado os if's que a definem para true.