2
respostas

Fazendo um inventário.

Estou fazendo um inventário para meu jogo que quando o jogador clica em um botão na tela, ele abre. Criar o inventário no Canvas e esse botão também. Criei um Empty GameObject para ser meu Inventory Controller e nele coloquei o seguinte código:

using System.Collections; using System.Collections.Generic; using UnityEngine;

public class InventoryController : MonoBehaviour {

bool invActive = false;
private GameObject InventárioInterface;

public void abrirInv()
{
//Se a boolean estiver false (inventário fechado) ela ficará verdadeira e vice-versa
    invActive =! invActive;
}

public void Update()
{
//Se invActive for true o inventário será aberto e se false, fechado
    InventárioInterface.SetActive(invActive);
}

Coloquei no botão o componente Event Trigger, selecionei o meu InventoryController e coloquei o método abrirInv, mas quando voltei pra tela da unity recebi esse erro além do inventário n abrir quando tento em um jogo. E por algum motivo o console enviou 999+ vezes o mesmo erro.

![Insira aqui a descrição dessa imagem para ajudar na acessibilidade](https://cdn1.gnarususercontent.com.br/1/4637323/1107a215-40b6-4106-b540-bc9938442978.png)  

Agredeço muito a ajuda e se alguém poder me ajudar a como prosseguir meu inventário, é um jogo point and click, com poucos itens e estou tentando pensar como faria para poder selecionar esses itens e exp: Se a chave estiver selecionada no seu inventário ao clicar na porta ela se abrirá ao invés de mostrar a mensagem "trancado".

Agradeço a ajuda desde já, Obrigado!

2 respostas

Por algum motivo o resto de texto que escrevi sobre o problema saiu dentro do código, relevem isso pfv aqui está a imagem Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Oi

O erro que você está enfrentando é uma exceção de referência nula (NullReferenceException). Isso geralmente ocorre quando você tenta acessar ou chamar um método em um objeto que não foi inicializado.

No seu código, você está tentando chamar o método SetActive no objeto InventárioInterface no método Update, mas parece que você não inicializou esse objeto em lugar nenhum do código. Portanto, quando você tenta acessá-lo, ocorre a exceção de referência nula.

Para corrigir isso, você precisa garantir que o objeto InventárioInterface seja inicializado antes de você tentar chamá-lo. Você pode fazer isso de várias maneiras, mas uma maneira comum é inicializar o objeto no método Start ou no método Awake. Aqui está um exemplo de como você pode modificá-lo:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class InventoryController : MonoBehaviour {
    bool invActive = false;
    private GameObject InventárioInterface;

    // Este método é chamado quando o script é iniciado
    void Start() {
        // Inicializa o objeto InventárioInterface
        InventárioInterface = GameObject.Find("NomeDoSeuInventarioInterface"); // Substitua pelo nome correto do seu objeto no Unity
    }

    public void abrirInv() {
        // Inverte o valor de invActive
        invActive = !invActive;
    }

    public void Update() {
        // Verifica se InventárioInterface não é nulo antes de chamar o método SetActive
        if (InventárioInterface != null) {
            InventárioInterface.SetActive(invActive);
        }
    }
}

Certifique-se de substituir "NomeDoSeuInventarioInterface" pelo nome correto do seu objeto InventárioInterface no Unity.

Além disso, para evitar que o método Update seja chamado muitas vezes sem necessidade, você pode considerar chamar Update apenas quando houver uma alteração no estado do inventário. Isso pode ajudar a reduzir a sobrecarga de chamadas desnecessárias.