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

Unity Początkujący Błąd

VPS Starter Arubacloud
0 głosów
371 wizyt
pytanie zadane 22 kwietnia 2020 w C# przez Rosool Użytkownik (660 p.)
using UnityEngine;
using UnityEngine.UI;

public class gra : MonoBehaviour
{
    public Text text;

    // Start is called before the first frame update
    public class Karta
    {
       
        public int kolor;
        public int wartosc;
        string nazwa;
      
        public  void Przypisz(int w, int k)
        {
            int n = w;
            kolor = k;
            wartosc = w;
            if (n < 11)
            {
                nazwa = n.ToString();
            }
            else if (n == 11)
            {
                nazwa = "Dupek";
            }
            else if (n == 12)
                nazwa = "Dama";
            else if (n == 13)
                nazwa = "Król";
            else if (n == 14)
                nazwa = "AS";
           
    
        }
    }

    public Karta[] karty = new Karta[52];
 
    void Start()
    {

        int x = 0;
        for (int i=2;i<=14 ;i++)
        {
            for(int y=1;y<=4;y++)
            {

                 karty[x].Przypisz(i,y);
               
                x++;
            }
        }
        text.text = x.ToString();
    }

    // Update is called once per frame
    void Update()
    {
        
    }
   
}

Witam wiem że kod nie perfekcyjny ale mi nie dziala i nie wiem z jakiego powodu a męczę sie już z tym godzine 

Błąd w kompilatorze nie wyskakuje a dopiero w unity o tej tresci:NullReferenceException: Object reference not set to an instance of an object  gra.Start () (at Assets/karty/gra.cs:54)
Dotyczy on tej linii: karty[x].Przypisz(i,y);

Prosze o pomoc 

I z góry dzieki oraz pozdrawiam

 

1 odpowiedź

0 głosów
odpowiedź 22 kwietnia 2020 przez Adrian1999 Nałogowiec (34,570 p.)
wybrane 23 kwietnia 2020 przez Rosool
 
Najlepsza
Stworzyłeś tablicę która ma miejsce na 52 obiekty, każdy obiekt jest zmienną referencyjną, nie wartościową. Także w przypadku kiedy chcesz działać na jakimś obiekcie pierw musisz go zaalokować. W prosty sposób, w pierwszej kolejności, przed przypisaniem napisz "karty[x] = new Karta();" Powinno zadziałać ;)

EDIT
Tak się jeszcze zapytam, czy funkcja przypisz jest konieczna? Opcja konstruktora wydaje mi się lepsza, dodatkowo polecałbym używać właściwości (props), lub tej bardziej czasochłonnej wersji czyli tworzenia zmiennych prywatnych oraz funkcji które zezwalają je edytować.
komentarz 23 kwietnia 2020 przez Rosool Użytkownik (660 p.)
Dzięki wielkie chciałem na konstruktorze ale nie wiedziałem jak go zadeklarowac gdy tworzę tablice klas dzięki wielki napewno zmienię na konstruktor

Podobne pytania

–1 głos
1 odpowiedź 444 wizyt
pytanie zadane 13 maja 2018 w OpenGL, Unity przez niezalogowany
0 głosów
1 odpowiedź 1,857 wizyt
pytanie zadane 25 lipca 2019 w Python przez Shitkariu Nowicjusz (140 p.)
0 głosów
2 odpowiedzi 132 wizyt
pytanie zadane 4 lipca 2019 w C i C++ przez colddog Nowicjusz (140 p.)

93,008 zapytań

141,975 odpowiedzi

321,257 komentarzy

62,350 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 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...