2016-05-22 5 views
0

Я пытаюсь удалить gameObject из мира и список с помощью:Unity Нажмите кнопку

Destroy(obj); 
    itemsInInv.Remove(obj.gameObject); 

Но по какой-то причине, он читает мой list.count, как 0 каждый раз, когда я пытаюсь ссылаться на него бросили щелчок мероприятие. Если я использую ключ и удаляю конкретный элемент, он отлично работает. Но когда я пытаюсь прочитать мой список бросил событие щелчка она возвращает 0 вместо количества элементов на самом деле в массиве

Как я могу нажать 'Z' и получить Debug.Log(itemsInInv.Count) скажу 15. Затем я нажму на элемент, чтобы попытаться запустить тот же Debug.Log(itemsInInv.Count), и он возвращает 0.

Я попытался использовать встроенный интерфейс в программе единства. Я попытался с помощью

items.GetComponent<Button>().onClick.AddListener(() => { useItem(); }); 

Что на самом деле работает 100% штраф за некоторое время, то по какой-то причине перестал работать и не будет работать снова, независимо от того, что я лол.

Я попытался с помощью:

void OnDestroy() 
{ 
    manager.GetComponent<UIManager>().Remove(this.gameObject); 
    Debug.Log("remove" + manager.GetComponent<UIManager>().itemsInInv.Count); 
} 
public void OnPointerClick(PointerEventData eventData) 
{ 
    Destroy(gameObject); 
} 

пытался также делать удалить в одной и той же функции, что и мыши. Та же проблема. Idk, как еще это можно сделать? Даже если я создаю логическое значение и настрою его на false, тогда используйте кнопку, чтобы установить его слишком true, он не будет читаться как true при отладке.

Что я в основном спрашиваю, как добавить список кнопок на экран. Затем удалите кнопку SAME, на которую я нажал, с экрана и списка.

+0

Где вы звоните 'items.GetComponent

+0

Its на KeyDown в моем обновлении. – Sniffle6

+0

Нажатие клавиши, пунктов = (GameObject) Instantiate (крестик , новый Vector2 (0.07514355f, -0.9026657f), новый Quaternion()); затем он устанавливает и позиционирует свой родительский элемент, затем добавляет элементы .GetComponent

ответ

1

Soo это то, что я сделал, чтобы получить это тоже работа ....

я добавил этот скрипт на мой деталь Thats будучи щелкнул

public void OnPointerClick(PointerEventData eventData) 
{ 
    EventSystem.current.SetSelectedGameObject(gameObject); 
    Debug.Log("hey"+ EventSystem.current.currentSelectedGameObject); 
} 

то в моем другом сценарии im работает

  items.GetComponent<Button>().onClick.AddListener(() => { useItem(); }); 

который работает

public void useItem() 
{ 
    Invoke("itemUsed", 0.25f); 
} 

, которая проходит через 0.25

void itemUsed() 
{ 
    Debug.Log(EventSystem.current.currentSelectedGameObject); 
    deleteItem(EventSystem.current.currentSelectedGameObject); 
    sortItems(); 
} 

я должен был сделать ВЫЗОВ, потому что звала useItem, до того, как в данный момент выбран был выбран

Кроме того, моя система событий была ребенком моего холста, который сделал мой gameManager не смог получить к нему доступ в путь я был

0

Не используйте список. Используй словарь.

public static Dictionary<string, GameObject> dict = new Dictionary<string, GameObject>(); 

то вы можете использовать имя игрового объекта.

foreach(GameObject r in FindObjectsOfType(typeof(GameObject))) 
{ 
     dict.Add(r.name, r); 
} 

Затем вы можете сделать

Destroy(gameObject.name); 
dict.Remove(gameObject.name); 
+0

Итак, если я делаю то, что я не могу добавить mroe, чем одно из чего-либо с тем же именем, плюс, как бы я использовал цикл for для итерации, бросил его для позиционирования gameObjects в словаре? – Sniffle6

+0

Используйте петлю foreach или Linq. foreach (KeyValuePair d in dict) {doSomething(); } И вы все еще можете хранить несколько экземпляров внутри словаря, просто используйте в нем массив игровых объектов. Словарь xplatinumx15

+0

Хм, хорошо, поэтому я сделал это. Но как я могу ссылаться на кнопку, на которую я нажал. Этот скрипт не находится в объекте gameObject, который уничтожается. Его по отдельному сценарию. Это на моем скрипте UIManager вместе с функцией useItem(). items.GetComponent

Смежные вопросы