Jump to content
Unity Insider Forum

Wie ein Random Objekt von Array Löschen?


kruemel

Recommended Posts

Hi Leute.

 

Ich bin am verzweifeln wie man ein zufällig gewaltes objekt von einem array löscht.

Ich habe jetzt schon einiges im internet dazu gelesen aber irgendwie verstehe ich die "RemoveAt" funktion nicht so ganz...

irgendwie hänge ich in meinem script fest und ich würde sehr gerne verstehen wie das ganze ordentlich funktioniert 😐

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

public class Test_array : MonoBehaviour
{
    
	public int size = 0;
	public GameObject[] Objekte = new GameObject[5];
	public int RandomNumber = 0 ;


    void Start()
    {

		size = Objekte.Length; 

		RandomNumber = Random.Range (0, size);

		Objekte.RemoveAt(RandomNumber);
        
    }

    
}

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du benutzt ein Array. Ein Array hat immer eine feste Größe (hier 5), die sich nicht ändern kann. Wenn sich die Anzahl der Elemente zur Laufzeit ändern können soll, nimm stattdessen eine Liste. Die hat nämlich auch die RemoveAt-Methode ;)

Statt

public GameObject[] Objekte = new GameObject[5];

machst du

public List<GameObject> Objekte;

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

AAAARG Stimmt ja 😵

Das hab ich ja total übersehen...

Ok dann werde ich das gleich mal testen.

 

Geht so eine liste auch als "static"?

 

weil ich würde gerne eine static liste erstellen wo sich im sekunden takt objekte per zufall ausgewählt werden und dann von der liste entfernt werden ohne das gleiche objekt nochmal zu wählen.

Liste und Length geht aber leider nicht musste ich gerade feststellen 😔

weil das random system ja wissen soll welche länge die liste hat.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 21 Minuten schrieb kruemel:

Liste und Length geht aber leider nicht musste ich gerade feststellen 😔

Bei Listen heißt es Count statt Length.

vor 21 Minuten schrieb kruemel:

Geht so eine liste auch als "static"?

 

weil ich würde gerne eine static liste erstellen wo sich im sekunden takt objekte per zufall ausgewählt werden und dann von der liste entfernt werden ohne das gleiche objekt nochmal zu wählen.

Klar! Dann gibt's halt nur noch eine globale Liste im gesamten Programm und nicht mehr eine pro "Test_array"-Objekt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Eine frage hab ich noch ^^

 

Macht es eigentlich einen performance unterschied ob ich ein Script mit den ganzen static listen ausstatte oder lieber pro Liste ein eigenes script?

Weil jede Liste umfasst so um die 100 objekte und es sind insgesammt 15 Listen.

 

Ich würde daher ein oder mehrere scripte machen welches nur die liste(n) enthält und dann extern die spawn punkte darauf zu greifen lassen

Link zu diesem Kommentar
Auf anderen Seiten teilen

Performance ist hier völlig irrelevant. Bei der Frage "static oder nicht static" geht es alleine um die Architektur deines Projekts. Du hast in deiner Szene GameObjects mit Komponenten drauf, und diese Objekte stellen irgendetwas in deiner Welt oder abstrakt in deinem Spiel dar. Ein Objekt ist ein Knopf, ein anderes Objekt ist eine Tür, und der Knopf referenziert die Tür, um sie zu öffnen. Ist es sinnvoll, mehrere Objekte zu haben, die alle eine Liste haben? Oder ergibt es mehr Sinn, fest im Code zu definieren, was für Listen und wie viele es so gibt? Da hängt eine Menge dran, und da braucht's einen Haufen Erfahrung, um das immer gut einschätzen zu können. Prinzipiell willst du zum Beispiel vermeiden, dass du den Code anfassen musst, wenn etwas neues in dein Spiel einfügst, das so funktioniert wie etwas, das bereits existiert. Wenn du zum Beispiel einen dritten spielbaren Charakter in ein Spiel einfügst, das bereits zwei spielbare Charaktere hat, solltest du im Optimalfall den Code gar nicht öffnen müssen. Überlege am besten einmal, ob das so hinhaut, wenn du jetzt 15 statische Listen anlegst.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Und leider noch ein weiteres problem habe ich aktuell...

 

Undzwar will ich die erstellte liste zum start zwichen speichern damit diese im nächsten level wieder abrufbar ist mit:

void Start()
	{
		Objekte_Save = Objekte;
	}

 

nur wenn ich jetzt die objekte abrufe und im update die einzelnen objekte von "Objekte" sich nach und nach löschen,

dann löschen sich diese aber auch in der "Objekte_Save" Liste obwohl diese doch eigenlich nicht im void update ist 😳

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...