Jump to content
Unity Insider Forum
JoeBlack

Spawn in leeren Bereich

Recommended Posts

Hallo zusammen.

2D: Ich möchte ein GameObject in einen noch leeren Bereich im Raum platzieren, wo noch kein Objekt ist (ausser der Hintergrund).

Wie kann ich die Scene abfragen ob in einem bestimmten Bereich gerade kein Objekt herumfliegt?

 

Ich habe ein wild herumfliegendes Asteroidenfeld.

Nun sollen neue Asteroiden (gesplittete) erzeugt werden an Positionen wo sich gerade kein Asteroid befindet. (Sonst hängen sie ineinander und erzeugen Unmengen von 'onCollsisions'

Kann ich den meinen 2D Raum abfragen, einen bestimmten Berich von der Grösse des neuen Asteroiden, ob sich hier ein Objekt(Asteroid) befindet?

Suche also eine Methode wo ich etwas so abfragen kann:

while(!CanSpawn){

      Rect = new RectPos(Vector2 ObenLinksNeuerZufall, Vector 2 UntenRechts=ObenLinksNeuerZufall + XYGrösseAsteroid)

      if ( !Rect.SomeObjectsHere ){

           CanSpawn=true;

       } else {

         CanSpwn = false;

     }

}

Danke für Tipps 

Share this post


Link to post
Share on other sites

Gibt es mehrere Möglichkeiten in deiner Situation. Du kannst wenn du etwas spawnen willst und die Position VORHER hast, kannst du deine Asteroiden durch loopen und abfragen. Kannst Abfragen, Asteroid A Größe und Position kombiniert abfragen, ob Asteroid B der gespawned der Punkt innerhalb Asteroid A ist. (Halt selber rechnen)

Oder kannst Unity Physic benutzen was ich empfehle und Physics2D.OverlapCircle(newSpawnedAsteroid, radius, filter, colliders). Da kannst du überprüfen, ob da genau etwas steht. Man bekommt ne Zahl zurück.

Share this post


Link to post
Share on other sites

Mein Problem war, dass ich die Asteroiden nicht durchloopen konnte:

Aber nun gefunden:; GameObject.FindGameObjectsWithTag(tag)     //tag = "Asteroid"

Danke für den Typ. mit Overlap, erspart mir das selbst rechnen.

 

Share this post


Link to post
Share on other sites

Du kannst die Asteroiden beim Instanzieren auch einfach in eine Liste schreiben oder nach einer Komponente auf diesen suchen, das ist etwas sauberer.

private readonly List<GameObject> list = new List<GameObject>();
//...
list.Add(Instantiate(asteroidPrefab));
  
//...oder...  
var asteroids = FindObjectsByType<Asteroid>(); //das setzt natürlich voraus, dass auf deinen Asteroiden eine nur für diesen Zweck bestimmte Komponente wie "Asteroid" liegt. Bei Transform würde er natürlich alle (aktiven) Transforms in der Szene finden etc.

 

Share this post


Link to post
Share on other sites

Generische Liste:

Danke! halte ich aber für nicht besser. Das wäre meine Notlösung gewesen.

Wenn etwas vorhanden ist, dazu noch mit einem Suchfilter nach Tag, dann erstelle ich nur allenfalls wegen der Performance eigene Datenhalter.

 

oder 

Ist mir neue. Ist "FindObjectsByType" eine Unity Funktion?

Eigne Komponenten für die Unity Umgebung. Gute Idee, bin aber noch nicht so weit mit dem Unity Wissen...... 

Share this post


Link to post
Share on other sites

OK.

Ich habe erwartet, dass die Tags Const entsprechen/sind. Und dann zur Kompilierzeit in Indexes für suchen umgewandelt werden und für die Suche so optimiert und schnell sind. Stimmt das nicht? --> Wäre ja möglich --> weil zur Kompilierzeit alle Werte schon bekannt sind (es kann ja vom Compiler festgestellt werden, dass keine Tags mit Variablen gesucht werden sondern nur durch andere Konstanten, fixe.Werte eben)

Aber Unity ist wohl nicht so hoch optimiert (bin ja Unity Anfänger)

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...