У меня есть массив, который контролирует мой список инвентаря пользовательского интерфейса.Когда я добавляю GameObject
к массиву, функция также добавляет тот же GameObject
к моему инвентарному интерфейсу.
В моем скрипте у меня также есть функция удаления, которая удаляет GameObject
из массива иудаляет GameObject
из пользовательского интерфейса.
Моя проблема заключается в том, что мне нужно изменить этот массив на список, чтобы он мог работать динамически, поскольку список имеет встроенную функциональность для перемещения элементов массивав начало массива (то есть переместить их влево в индексе массива).
Например, в настоящее время при использовании массива, когда я выбираю пункты 1,2,3,4 и 5. Затем яперейдите к удалению элемента 3. То, что осталось в моем массиве, это 1,2, ноль, 4 и 5. Кроме того, то, что осталось в моем интерфейсе инвентаря, это GameObject
s в слотах 1,2, ноль, 4,5,В этом случае пустым является изображение пользовательского интерфейса, на котором ничего нет.
Преобразовав этот массив в список, я считаю, что я могу избежать пробелов в пользовательском интерфейсе инвентаризации.Также я знаю, что мой массив и / или список всегда будут состоять из 16 элементов.
Я попытался преобразовать существующий массив в список и использовать все методы, которые соответствуют методам списка.
Исходное использование массива:
public class Inventory : MonoBehaviour
{
public GameObject[] inventory = new GameObject[16];
public List<GameObject> inventory2 = new List<GameObject>();
public void AddItem(GameObject item)
{
bool itemAdded = false;
//find the first open slot in inventory
for (int i = 0; i < inventory.Length; i++)
{
if (inventory[i] == null)
{
inventory[i] = item;
//Update UI
InventoryButtons[i].image.overrideSprite =
item.GetComponentInChildren<SpriteRenderer>().sprite;
}
}
}
Моя попыткапреобразуйте это в список и используйте его следующим образом:
public class Inventory : MonoBehaviour
{
public List<GameObject> inventory = new List<GameObject>();
public void AddItem(GameObject item)
{
bool itemAdded = false;
//find the first open slot in inventory
for (int i = 0; i < inventory.Count; i++)
{
if (inventory[i] == null)
{
inventory[i] = item;
//Update UI
InventoryButtons[i].image.overrideSprite =
item.GetComponentInChildren<SpriteRenderer>().sprite;
}
}
}
}
Поскольку я думал, что списки и массивы работают одинаково, я думал, что мой метод будет работать, но список все еще действует как массив, то естьпосле удаления элементов из массива он не перемещается динамически в элементы массива вперед.