如何将现有数组用作列表?

时间:2019-06-23 05:09:18

标签: c# arrays list unity3d

我有一个数组,可以控制我的UI库存清单。当我向数组添加GameObject时,该函数还将相同的GameObject添加到清单UI。

在我的脚本中,我还有一个remove函数,该函数从数组中删除GameObject,并从UI中删除GameObject

我的问题是,我需要将此数组更改为列表,以便它可以动态工作,因为列表具有内置功能,可以将数组的元素移到数组的前面(即将它们向左移)在数组索引中)。

例如,当前在使用数组时,当我选择项1,2,3,4和5时,我便继续删除项3。数组中剩下的是1,2,null,4,和5.同样,我的库存用户界面中剩下的是插槽1,2,null,4,5中的GameObject。在这种情况下,null是没有任何内容的UI图像。

通过将该数组转换为列表,我相信我可以避免清单UI中存在空白。同样,我知道我的数组和/或列表将始终为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;
            }
        }
    }
}

我以为列表和数组的工作原理相同,我以为我的方法可以工作,但是列表仍然充当数组,也就是说,在删除项目后,它不是将数组中的项目动态移到最前面从数组中获取。

1 个答案:

答案 0 :(得分:0)

如果阵列版本可行,并且您始终想要16个项目,为什么不这样做就删除一个项目:

.gitignore

我们从要删除的索引5开始,到数组1的末尾,将每个下一个项目复制到当前项目的顶部。然后我们完成循环,并使最后一项为空