我有一个数组,可以控制我的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;
}
}
}
}
我以为列表和数组的工作原理相同,我以为我的方法可以工作,但是列表仍然充当数组,也就是说,在删除项目后,它不是将数组中的项目动态移到最前面从数组中获取。
答案 0 :(得分:0)
如果阵列版本可行,并且您始终想要16个项目,为什么不这样做就删除一个项目:
.gitignore
我们从要删除的索引5开始,到数组1的末尾,将每个下一个项目复制到当前项目的顶部。然后我们完成循环,并使最后一项为空