c# - 如何像列表一样使用现有的数组?
问题描述
我有一个数组来控制我的 UI 库存列表。当我将 a 添加GameObject
到数组时,该函数也会将其添加GameObject
到我的库存 UI。
在我的脚本中,我还有一个删除函数,它GameObject
从数组中删除 并GameObject
从 UI 中删除。
我的问题是我需要将此数组更改为列表,以便它可以动态工作,因为列表具有将数组元素移动到数组前面的内置功能(即在数组中向左移动它们指数)。
例如,当前使用数组时,当我选择项目 1、2、3、4 和 5 时。然后我继续删除项目 3。我的数组中剩下的是 1、2、null、4 和 5。同样,我的库存 UI 中剩下的就是GameObject
插槽 1,2,null,4,5 中的 s。在这种情况下,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;
}
}
}
}
由于我认为列表和数组的工作方式相同,我认为我的方法可以工作,但是列表仍然充当数组,也就是说,在从数组中删除项目后,它不会动态地将数组中的项目移动到前面.
解决方案
如果数组版本成功并且您总是想要 16 个项目,为什么不这样做来删除一个项目:
//remove item at index 5
for (int i = 5; i < inventory.Count - 1; i++)
inventory[i] = inventory[i+1];
inventory[inventory.Length - 1] = null;
我们从要删除的索引 5 开始,然后继续到 array-1 的末尾,将每个下一个项目复制到当前项目的顶部。然后我们完成循环并使最后一项为空
推荐阅读
- javascript - JQuery UI 自动竞争多搜索和限制
- sql-server - 使用 PYODBC 从 Pandas 写入 SQL Server 数据库
- java - 从 PDF 中提取 TIFF 图像而不进行解码
- c# - 将 ItemsControl 项 ContentPresenters 相互叠加
- c# - 如何将短 URL 重定向到更长的描述性 URL
- json - Angular 6:使用服务获取本地 json 数据
- python - python def函数和输入
- r - 从 R 中的 x、y、z 散射数据绘制 3D 表面
- sql-server - 如何在 SQL Server 中为阈值创建动态过程?
- html - 如何创建一个最大宽度的 div,包括响应式填充?