Jump to content
Unity Insider Forum

Instantiate ein Objekt untereinander anstelle von übereinander


ShiiikK

Recommended Posts

Zunächst einmal habe ich ein GIF erstellt, um zu zeigen, wie es aktuell bei mir aussieht.

GIF zur aktuellen Lage

und ein Bild wie es aussehen sollte.

Bild wie es sein sollte

Ich habe eine Liste von GameObjects, die die BodyParts Temporär hinzufügen und in der richtigen Zeit und Position instanziieren.
Jetzt funktioniert das wie erwartet, aber ich möchte das neue bodyParts unter einander spawnen statt darüber.


Man kann erkennen das der Kopf "unter" den neuen Körperteilen erscheint, aber er sollte immer oben sein und jedes neue Körperteil sollte unter einander erscheinen.


**Was ich versuchte:** : 

```
bodyParts.transform.SetAsFirstSibling();
```

Das verändert aber nur die Hierarchie Anordnung, den selben Effekt habe ich auch wenn ich die Clone manuell verschiebe, das hat aber keinen Einfluss darauf ob etwas übereinander oder untereinander erscheint. Daher hat das für mich nicht funktioniert.


Ich weis das es möglich ist, schließlich nutze ich ein bereits bestehendes Unity Game als Vorlage nutze zu meinen Lernzwecken.

Hoffe hier ist jemand der sowas in der Art schon gelöst hat.

**Hier mein Code der die bodyParts erstellt:**

    private void CreateBodyParts()
    {
        if (snakeBody.Count == 0)
        {
            
            GameObject temp1 = Instantiate(bodyParts[0], transform.position, transform.rotation, transform);
            if (!temp1.GetComponent<MarkerManager>())
                temp1.AddComponent<MarkerManager>();
            if (!temp1.GetComponent<Rigidbody2D>())
            {
                temp1.AddComponent<Rigidbody2D>();
                temp1.GetComponent<Rigidbody2D>().gravityScale = 0;
            }
            snakeBody.Add(temp1);        
            bodyParts.RemoveAt(0);
        }
        MarkerManager markM = snakeBody[snakeBody.Count - 1].GetComponent<MarkerManager>();
        if (countUp == 0)
        {
            markM.ClearMarkerList();
        }
        countUp += Time.deltaTime;
        if (countUp >= distanceBetween)
        {
            GameObject temp = Instantiate(bodyParts[0], markM.markerList[0].position, markM.markerList[0].rotation, transform);
  
            if (!temp.GetComponent<MarkerManager>())
                temp.AddComponent<MarkerManager>();
            if (!temp.GetComponent<Rigidbody2D>())
            {
                temp.AddComponent<Rigidbody2D>();
                temp.GetComponent<Rigidbody2D>().gravityScale = 0;
            }
            snakeBody.Add(temp);
            
            bodyParts.RemoveAt(0);
            temp.GetComponent<MarkerManager>().ClearMarkerList();
            countUp = 0;
        }

    }


 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Moin!

SpriteRenderern ist ihre Reihenfolge in der Hierarchie egal. Deren Zeichenreihenfolge ist undefiniert, solange sie auf demselben Layer mit derselben sortingOrder sind.

Du kannst den SpriteRenderer ansprechen und einen sortingOrder setzen, der dem Index des Elements entspricht:

temp.GetComponent<SpriteRenderer>().sortingOrder = snakeBody.Count;

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

  

vor 54 Minuten schrieb Sascha:

Moin!

SpriteRenderern ist ihre Reihenfolge in der Hierarchie egal. Deren Zeichenreihenfolge ist undefiniert, solange sie auf demselben Layer mit derselben sortingOrder sind.

Du kannst den SpriteRenderer ansprechen und einen sortingOrder setzen, der dem Index des Elements entspricht:

temp.GetComponent<SpriteRenderer>().sortingOrder = snakeBody.Count;

 

 

 

Top. Das war genau was ich suchte. Klasse :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...