2017-02-21 51 views
0

Я пытаюсь уничтожить экземплярные сборные файлы с одним и тем же тегом, один за другим, от последнего экземпляра до первого, и я зациклился на том, как это сделать.Уничтожить созданные экземпляры с одним и тем же тегом, по одному, от последнего экземпляра до первого?

Идея состоит в том, что я хочу иметь собственный редактор, который позволит мне создать несколько надстроек, а затем «отменить» последнее создание с помощью двух кнопок GUI - «Разместить объект» и «Отменить» соответственно.

На данный момент я могу успешно создавать надписи, добавлять к ним те же теги, а затем уничтожать их один за другим, но они уничтожаются от первого до последнего экземпляра.

код у меня до сих пор:

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; 
    } 
} 

И часть из сценария редактора для кнопок графического интерфейса «Место объекта» и «Undo»:

     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(); 

действительно нужна помощь по этому вопросу, любые идеи или предложения приветствуются. Заранее спасибо;)

+0

часть «Отменить» выглядит точно так же, как часть «Место объекта»? –

+0

Есть ли причина, по которой вы используете 'FindWithTag' вместо того, чтобы просто вытаскивать последний элемент из списка и уничтожать его? – rutter

ответ

0

В этом случае я выберу Queue или LinkList. Вы можете добавить в него все игровые объекты, и управление будет простым и точным в другом ключе.

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