2017-02-21 2 views
0

Ich versuche, instanziierte Prefabs mit einem gleichen Tag, eins nach dem anderen, von zuletzt instanziiert zu ersten zu zerstören, und ich bin fest, wie dies zu erreichen ist.Instanziierte vorgefertigte Prefabs mit demselben Tag nacheinander von der letzten Instanz in die erste Instanz löschen?

Die Idee ist, dass ich einen benutzerdefinierten Editor haben möchte, mit dem ich mehrere Prefabs instanziieren und dann die letzte Instanziierung mit zwei GUI-Schaltflächen "Objekt platzieren" bzw. "Rückgängig" rückgängig machen kann.

Ab sofort kann ich Prefabs erfolgreich instanziieren, ihnen das gleiche Tag hinzufügen und sie dann nacheinander zerstören, aber sie werden von der ersten bis zur letzten Instanz zerstört.

Der Code, den ich bisher habe:

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

public class ObjectInstantiateControl : MonoBehaviour { 

public List<GameObject> prefabList = new List<GameObject>(); 
[HideInInspector] 
public int objectSelectionIndex = 0; 
GameObject instance; 

public void PlaceObject() 
{ 
    switch (objectSelectionIndex) 
    { 
     case 1: 

      Debug.Log("Just received a number 1 from the editor"); 
      GameObject object_A = Resources.Load("Object_A") as GameObject; 
      instance = Instantiate(object_A, this.transform.position, this.transform.rotation, this.transform); 

      instance.tag = "UsedObject"; 
      prefabList.Add(instance); 

      break; 

     case 2: 

      Debug.Log("Just received a number 2 from the editor"); 
      GameObject object_B = Resources.Load("Object_B") as GameObject; 
      instance = Instantiate(object_B, this.transform.position, this.transform.rotation, this.transform); 

      instance.tag = "UsedObject"; 
      prefabList.Add(instance); 
      break; 

     case 3: 

      Debug.Log("Just received a number 3 from the editor"); 
      GameObject object_C = Resources.Load("Object_C") as GameObject; 
      instance = Instantiate(object_C, this.transform.position, this.transform.rotation, this.transform); 

      instance.tag = "UsedObject"; 
      prefabList.Add(instance); 
      break; 

     case 4: 

      Debug.Log("Just received a number 4 from the editor, deleting the object"); 

      prefabList.Remove(GameObject.FindWithTag("UsedObject")); 
      DestroyImmediate(GameObject.FindWithTag("UsedObject")); 
      break; 
    } 
} 

Und das Teil aus dem Editor Skript für GUI-Tasten "Platz Objekt" und "Rückgängig":

     GUILayout.BeginHorizontal(); 

        if (GUILayout.Button("Place object", GUILayout.Height(25))) 
        { 
         ObjectInstantiateControl myScript = (ObjectInstantiateControl)target; 
         myScript.objectSelectionIndex = 1; 
         myScript.PlaceObject()(); 

        } 

        if (GUILayout.Button("Undo", GUILayout.Height(25))) 
        { 
         ObjectInstantiateControl myScript = (ObjectInstantiateControl)target; 
         myScript.objectSelectionIndex = 4; 
         myScript.PlaceObject(); 

        } 
        GUILayout.EndHorizontal(); 

wirklich auf diese Hilfe brauchen, Ideen oder Vorschläge sind willkommen. Vielen Dank im Voraus;)

+0

der Teil "Rückgängig" sieht genauso aus wie der Teil "Objekt platzieren"? –

+0

Gibt es einen Grund, warum du 'FindWithTag' verwendest, anstatt nur das letzte Element von der Liste zu entfernen und dieses zu zerstören? – rutter

Antwort

0

In diesem Fall werde ich Queue oder LinkList wählen. Sie können alle Spielobjekte hinzufügen und die Verwaltung wird einfach und gut in anderer Weise.

https://msdn.microsoft.com/en-us/library/system.collections.queue(v=vs.110).aspx 
https://msdn.microsoft.com/en-us/library/he2s3bh7(v=vs.110).aspx 
Verwandte Themen