• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Nieznany błąd w kodzi

Aruba Cloud - Virtual Private Server VPS
0 głosów
519 wizyt
pytanie zadane 6 sierpnia 2022 w C# przez IsaacVV Początkujący (350 p.)
edycja 6 sierpnia 2022 przez ScriptyChris

Witam, próbuję stworzyć grę survival, dopiero uczę się programować znallazłem na yt poradniki natomiast u mnie pojawia się błąd który w filmie nie wyskakuje, przeszukałem cały kod już wiele razy.
 

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

public class Ekwipunek : MonoBehaviour
{
    public List<Przedmiot> listaPosiadanychPrzedmiotow = new List<Przedmiot> ();
    bool czyWyswietlicEkwipunek;
    public GUISkin skin;
    int iloscSlotowX;
    int iloscSlotowY;

    void Start ()
    {
        czyWyswietlicEkwipunek = false;
        iloscSlotowX = 5;
        iloscSlotowY = 4;
    }
    
    void Update ()
    {
        if(Input.GetKeyUp (KeyCode.I))
        {
            czyWyswietlicEkwipunek = !czyWyswietlicEkwipunek;
        }

    }
    void OnGUI ()
    {
        if(czyWyswietlicEkwipunek == true)
        {
            WyswietlEkwipunek ();
        }
    }
    void WyswietlEkwipunek()
    {
        for(int x = 0; x < iloscSlotowX; x++)
        {
            for(int y = 0; y < iloscSlotowY; y++)
            {
                Rect polozenieSlotow = new Rect ((Screen.width * 0.15f) + (x * Screen.width * 0.075f), Screen.height * 0.25f + (y * Screen.height * 0.13f), Screen.width * 0.07f, Screen.height * 0.12f);
                GUI.Box(polozenieSlotow, "", skin.GetStyle("SlotEkwipunku"));
            }
        }
    }
}



gdy włączę unity i włączę ten "ekwipunek" spamuje bez końca takim błędem.

NullReferenceException: Object reference not set to an instance of an object
Ekwipunek.WyswietlEkwipunek () (at Assets/Paski/Skrypty/Ekwipunek/Ekwipunek.cs:42)
Ekwipunek.OnGUI () (at Assets/Paski/Skrypty/Ekwipunek/Ekwipunek.cs:32)

Wydaje mi się że void mimo że wczytał cały ekwipunek próbuje wczytywać dalej a nie wiem jak go zatrzymać, ale nie znam prawdziwego problemu.

1
komentarz 6 sierpnia 2022 przez ScriptyChris Mędrzec (190,190 p.)

@IsaacW, na przyszłość proszę umieszczać kod w odpowiednich bloczkach.

komentarz 6 sierpnia 2022 przez IsaacVV Początkujący (350 p.)
Dziękuję za poprawienie.

5 odpowiedzi

0 głosów
odpowiedź 6 sierpnia 2022 przez Apled Dyskutant (9,520 p.)
NullReferenceException: Object reference not set to an instance of an object
Ekwipunek.WyswietlEkwipunek () (at Assets/Paski/Skrypty/Ekwipunek/Ekwipunek.cs:42)
Ekwipunek.OnGUI () (at Assets/Paski/Skrypty/Ekwipunek/Ekwipunek.cs:32)

Błąd jest tak nie znany, że zwraca znany błąd.

(at Assets/Paski/Skrypty/Ekwipunek/Ekwipunek.cs:42)

(at Assets/Paski/Skrypty/Ekwipunek/Ekwipunek.cs:32)

W dodatku błąd informuje Cię, gdzie znajduje się jego przyczyna, czyli w linii 42 i linii 32.

Domyślam się, że w edytorze nie przekazujesz niczego do skryptu jako GUI i stąd NullReference

komentarz 6 sierpnia 2022 przez IsaacVV Początkujący (350 p.)
Wysłałem cały kod w tym skrypcie, nie używałem w żadnym innym "WyswietlEkwipunek ();"
ani "GUI.Box(polozenieSlotow, "", skin.GetStyle("SlotEkwipunku"));" Natomiast albo jestem ślepy i oglądając filmiki po 10 razy szukając czy gdzieś to na filmie dodał albo osoba od której się uczę też nigdzie tego nie dodawała(nie miał podpowiedzi przy wpisywaniu tego) tu filmik: https://www.youtube.com/watch?v=gGX0yCqEUC4
obejrzałem następny, powiększyłem kod, u niego bez błędu u mnie ten sam, niby działa ale jak mam włączony ekwipunek 5s to już ponad 1000 razy błąd się powtarza.
Błąd pojawia się w miejscu który odtwarza i wyświetla wszystko co ma wyświetlić, lecz wyrzuca błąd.
komentarz 6 sierpnia 2022 przez Apled Dyskutant (9,520 p.)
Czy w edytorze (nie w kodzie) masz powiązane ze skryptem jakieś GUI? Jeżeli masz tam puste pole, to próbujesz odwoływać się do czegoś, czego nie ma i to najprawdopodobniej jest problemem.
0 głosów
odpowiedź 6 sierpnia 2022 przez IsaacVV Początkujący (350 p.)

Wysłałem cały kod w tym skrypcie, nie używałem w żadnym innym "WyswietlEkwipunek ();"
ani "GUI.Box(polozenieSlotow, "", skin.GetStyle("SlotEkwipunku"));" Natomiast albo jestem ślepy i oglądając filmiki po 10 razy szukając czy gdzieś to na filmie dodał albo osoba od której się uczę też nigdzie tego nie dodawała(nie miał podpowiedzi przy wpisywaniu tego) tu filmik: https://www.youtube.com/watch?v=gGX0yCqEUC4
obejrzałem następny, powiększyłem kod, u niego bez błędu u mnie ten sam, niby działa ale jak mam włączony ekwipunek 5s to już ponad 1000 razy błąd się powtarza.
Błąd pojawia się w miejscu który odtwarza i wyświetla wszystko co ma wyświetlić, lecz wyrzuca błąd.

0 głosów
odpowiedź 7 sierpnia 2022 przez IsaacVV Początkujący (350 p.)

Zauważyłem że nie pojawiają mi się paski hp i tak dalej (działało), więc zmieniłem nazwę skryptu Ekwipunku by go nie odczytywało, i zaczął się tak samo kopiować błąd z paskami:
NullReferenceException: Object reference not set to an instance of an object
Paskipotrzeb.OnGUI () (at Assets/Paski/Skrypty/Paskipotrzeb.cs:70)
 

using System.Collections;
using UnityEngine;

public class Paskipotrzeb : MonoBehaviour {

    public float maxHP, obecneHP, maxGlod, obecneGlod, maxPragnienie, obecnePragnienie, maxEnergia, obecnaEnergia;
    public GUISkin skin;
    public UnityStandardAssets.Characters.FirstPerson.FirstPersonController Fpsc;
    bool czyEnergiaOdjeta;
    public float timer;
    void Start ()
    {
        maxHP = 100;
        obecneHP = 100;
        maxGlod = 50;
        obecneGlod = 50;
        maxPragnienie = 50;
        obecnePragnienie = 50;
        maxEnergia = 50;
        obecnaEnergia = 50;
        czyEnergiaOdjeta = false;
    }

    // Update is called once per frame
    void Update()
    {
        obecneGlod -= 0.3f * Time.deltaTime;
        obecnePragnienie -= 0.1f * Time.deltaTime;
        if (Fpsc.m_IsWalking == false)
        {
            obecnaEnergia -= 3 * Time.deltaTime;
            timer = 3;
        }
        if (Fpsc.m_Jumping == true && czyEnergiaOdjeta ==false)
        {
            czyEnergiaOdjeta = true;
            obecnaEnergia = obecnaEnergia - 8;
            timer = 3;
        }
        if(Fpsc.m_Jumping == false)
        {
            czyEnergiaOdjeta = false;
        }
        if(timer > 0)
        {
            timer -= 1 * Time.deltaTime;
        }
        if(timer <= 0)
        {
            timer = 0;
            if (obecnaEnergia < maxEnergia)
            {
                obecnaEnergia += 6 * Time.deltaTime;
            }
        if(obecneGlod <= 0)
            {
                obecneGlod = 0;
                obecneHP -= 0.5f * Time.deltaTime;
            }
        if(obecnePragnienie <= 0)
            {
                obecnePragnienie = 0;
                obecneHP -= 1.5f * Time.deltaTime;
            }
        }
    }

    void OnGUI()
    {
        GUI.Box(new Rect(50, Screen.height - 125, 150, 20), "Zdrowie: " + obecneHP.ToString("0") + "/" + maxHP, skin.GetStyle("PasekZdrowia"));
        GUI.Box(new Rect(50, Screen.height - 100, 150, 20), "Głód: " + obecneGlod.ToString("0") + "/" + maxGlod, skin.GetStyle("PasekGlodu"));
        GUI.Box(new Rect(50, Screen.height - 75, 150, 20), "Pragnienie: " + obecnePragnienie.ToString("0") + "/" + maxPragnienie, skin.GetStyle("PasekPragnienia"));
        GUI.Box(new Rect(50, Screen.height - 50, 150, 20), "Energia: " + obecnaEnergia.ToString("0") + "/" + maxEnergia, skin.GetStyle("PasekEnergii"));
    }
}

nagle całe GUI.Box przestało działać, po restarcie unity już nic nie mogę wyświetlić co się mogło stać? Nic nie zmieniałem a jeśli wyłączył się z odczytu w unity to jak to włączyć?
Proszę pomóżcie, wiele godzin już to robię.

0 głosów
odpowiedź 7 sierpnia 2022 przez IsaacVV Początkujący (350 p.)
Jeszcze nie wiem dlaczego, ale zaczęło działać, teraz nie widzę tylko pasków potrzeb, może to też się samo naprawi. Jeśli ktoś ma jakiś pomysł proszę o radę
0 głosów
odpowiedź 7 sierpnia 2022 przez IsaacVV Początkujący (350 p.)
Nagle paski się pojawiły, nie rozumiem ale ok. Temat można zamknąć

Podobne pytania

+1 głos
2 odpowiedzi 507 wizyt
pytanie zadane 10 października 2021 w C i C++ przez <młody_programista> Początkujący (450 p.)
0 głosów
1 odpowiedź 357 wizyt
pytanie zadane 26 lipca 2019 w C i C++ przez martin1724 Użytkownik (690 p.)
0 głosów
3 odpowiedzi 218 wizyt
pytanie zadane 19 kwietnia 2016 w Java przez Ditrix Mądrala (5,650 p.)

93,281 zapytań

142,285 odpowiedzi

322,304 komentarzy

62,604 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...