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

[C#] Jak zamienić to na while?

Object Storage Arubacloud
0 głosów
213 wizyt
pytanie zadane 16 lipca 2018 w C# przez MsMaciek123 Pasjonat (24,760 p.)
public TextMesh TextOfLoad;
private GameObject Blod;

void DAB(){
	DestroyAllBlocks();
}

public void DestroyAllBlocks(){
		Blod = GameObject.FindWithTag("block");
		if(Blod!=null){
			TextOfLoad.text = Blod.ToString();
			Destroy(Blod);
			DAB();
		}
		else
		{
			Blod=null;
			TextOfLoad.text = "Null";
		}
}

Taki kod w unity wywala błąd. Myślałem nad zastąpieniem tego pętlą While, ale coś nie działa. Pomógłby ktoś?

komentarz 16 lipca 2018 przez niezalogowany
Hej, dużo łatwiej będzie jak podasz jaki błąd wywala ci w konsoli :d
komentarz 16 lipca 2018 przez MsMaciek123 Pasjonat (24,760 p.)

Hej, tak na logikę co może wywalać błąd, to że pętle się zapętlają. Unity zatrzymuje program i wywala błąd.

 

StackOverflowException
UnityEngine.GameObject.FindWithTag (System.String tag) (at C:/buildslave/unity/build/artifacts/generated/bindings_old/common/Core/GameObjectBindings.gen.cs:299)
LevelGenerator.DestroyAllBlocks () (at Assets/Scripts/LevelGenerator.cs:62)
LevelGenerator.DAB () (at Assets/Scripts/LevelGenerator.cs:58)
LevelGenerator.DestroyAllBlocks () (at Assets/Scripts/LevelGenerator.cs:66)
LevelGenerator.DAB () (at Assets/Scripts/LevelGenerator.cs:58)
LevelGenerator.DestroyAllBlocks () (at Assets/Scripts/LevelGenerator.cs:66)
LevelGenerator.DAB () (at Assets/Scripts/LevelGenerator.cs:58)
LevelGenerator.DestroyAllBlocks () (at Assets/Scripts/LevelGenerator.cs:66)
... ( za dlugi tekst ale tu jest to samo co wyzej)
LevelGenerator.DAB () (at Assets/Scripts/LevelGenerator.cs:58)
LevelGenerator.DestroyAllBlocks () (at Assets/Scripts/LevelGenerator.cs:66)
LevelGenerator.DAB () (at Assets/Scripts/LevelGenerator<message truncated>

 

2 odpowiedzi

0 głosów
odpowiedź 16 lipca 2018 przez niezalogowany
Jeśli dobrze rozumiem to może łatwiej będzie ci w ten sposób:

1) Znajdź wszystkie obiekty z danym tagiem i zapisz do listy/tablicy

https://docs.unity3d.com/ScriptReference/GameObject.FindGameObjectsWithTag.html <= tutaj masz funkcję, która znajdzie Ci wszystkie obiekty z danym tagiem

2) Przejdź po liście/tablicy pętlą `for` i w każdej iteracji rób to co tam musisz z tym obiektem
komentarz 16 lipca 2018 przez MsMaciek123 Pasjonat (24,760 p.)
Unikasz rozwiązania problemu. Ja chcę skorzystać z while.
komentarz 16 lipca 2018 przez niezalogowany
Jak nie patrzeć próbuję podsunąć Ci lepsze rozwiązanie niż while. Jak użyjesz while to będziesz w każdym obrocie pętli szukał obiektu na scenie -> duże obciążenie maszyny. Zrobisz jak uważasz :)
komentarz 17 lipca 2018 przez MsMaciek123 Pasjonat (24,760 p.)
-_- Szkoda tylko że każdy obiekt ma taką samą nazwe i taki sam tag. Więc dodanie 10 takich samych obiektów do tablicy nic nie da bo i tak się usunie jeden.
1
komentarz 17 lipca 2018 przez niezalogowany
Wiesz, z chęcią bym ci pomógł ale jesteś strasznym ignorantem i nie chce mi się tu tracić czasu :)
0 głosów
odpowiedź 16 lipca 2018 przez niezalogowany

Nie wiem czy dobrze zrozumiałem, ale może użyj pętli foreach, coś w tym stylu:

public void DestroyAllBlocks(){
	    Blods = GameObject.FindWithTag("block");
		if(Blods) {
			foreach(var blod in Blods) {			
				TextOfLoad.text = blod.ToString();
                                Destroy(blod);			 
			}
 		} else {
				Blods = null;
				TextOfLoad.text = "Null";
			}		
}

 

Podobne pytania

0 głosów
1 odpowiedź 368 wizyt
pytanie zadane 5 listopada 2016 w C# przez Alex.Ironside Stary wyjadacz (14,900 p.)
0 głosów
1 odpowiedź 440 wizyt
pytanie zadane 9 listopada 2016 w C# przez Alex.Ironside Stary wyjadacz (14,900 p.)
0 głosów
0 odpowiedzi 91 wizyt
pytanie zadane 18 stycznia 2020 w C# przez r.mar Początkujący (470 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...