Unity: Jak przypisać GameObject do tablicy?


#1

Generuję sobie mapę na podstawie pliku zawierającego inty, każda cyfra odpowiada innemu kafelkowi.

Chciałbym przypisać wygenerowany obiekt do tablicy aby później móc go usunąć na podstawie pozycji X i Y.
private GameObject[,] Nodes;
GameObject _go;

_go = (GameObject)Instantiate(someNodePrefab, new Vector3(x, 0, y), Quaternion.identity);

// Przy próbie zapisu obiektu do tablicy poniższa linijka powoduje przerwanie pętli rysowania nodów, rysuje się jedynie pierwszy.
Nodes[x,y] = _go.GetComponent();

Nie potrzebował bym tego przypisywania do tablicy gdy działało mi poprawnie OnMouseEnter() ale problem jest tego typu że nie reaguje na wszystkie kafelki.

Nie rozumiem czemu część z kafelków mimo że są wygenerowane jak reszta nie jest widoczna dla tej metody oraz dla OnMouseDown(). Zmieniając ustawienie kamery przestają reagować inne kafelki.

Czy ktoś spotkał się z takim problemem że jakiś z obiektów nie był aktywny dla tych dwóch metod?


#2

Utworzyłeś instancję Nodes?
Btw, cóż za dziwaczny sposób nadawania nazw. Private z wielkiej litery, podkreślenie na początku, zgaduję, że dla zmiennej lokalnej…


#3

Problem nie jest w nazewnictwie zmiennych.

Wzoruję się na https://github.com/SacuL/3D-Chess-Unity/blob/master/Assets/Scripts/BoardManager.cs i tu nie ma żadnej instancji jedynie deklaracja korzystania z obiektu.


#4

No to utwórz instancję tej tablicy używając ‘new’. To o nazewnictwie to tylko taka luźna uwaga.


#5

Dziękuję, tego właśnie brakowało, instancji tablicy. To moje totalne początki z Unity.


#6

@frozenshade To jeśli już tak dobrze idzie to może spotkałeś się z tym problemem że OnMouseEnter() i OnMouseDown() nie reaguje na losowe obiekty w zależności od ustawień kamery?


#7

Może coś innego, co przechwytuje mysz je zakrywa?


#8

Obstawiam kamerę ponieważ jeśli zmieniam jej kąt to inne kafelki są nieaktywne.

Kamera sama w sobie nie ma przypisanego skryptu ale w menadzerze korzystam z RaycastHit i Physics.

Te metody działają bezbłędnie i to dzięki nim wiem w co klikam. Tamte były przypisane dla konkretnych elementów ale już z nich zrezygnowałem i wykorzystuje to co działa czyli Physics.Reycast.

Mam tylko kamerę, światło i kafelki generowane dynamicznie to nie za bardzo ma co przykrywać na razie nie ma nawet UI, a fakt w innej gierce mi zakrywało planszę ale jakoś do tego doszedłem.

Aczkolwiek mam pusty element GameManager i jest na szczycie Hierarchii a w nim cała obsługa gierki, to może ten Physics.Reycast czasami powodował zakrywanie bo co innego on robił a co innego OnMouseEnter() na konkretnym kafelku.


#9

takie pytanko korzystasz z tilemap ?
pamiętaj tylko aby zwolnić instancję z listy w momencie wywołania OnDestroy()


#10

@niciel Nie korzystam z tilemap, robię prostą gierkę z dzieciństwa, mam planszę 8x8 i po kliknięciu w kafelek robi się rewers kafelków [3x3], planszę generuję na postawie mapy (jest 1-kafelek/0-brak) zapisanej w pliku tekstowym generują mi się obiekty a usuwam je na podstawie tablicy do której są przypisane.