kej*_*ion 0 c# unity-game-engine
我正在尝试为游戏的设备经理编写代码。
这是代码:
public class EquipmentManager : MonoBehaviour
{
public int slots;
public List<Equipment> defaultEquipment;
public List<Equipment> currentEquipment;
private void Start()
{
slots = System.Enum.GetNames(typeof(EquipmentSlot)).Length;
EquipDefault();
}
public void Equip(Equipment newEquipment)
{
foreach (Equipment oldEquipment in currentEquipment)
{
if (oldEquipment.slot == newEquipment.slot)
{
Unequip(oldEquipment);
break;
}
}
currentEquipment.Add(newEquipment);
gameObject.GetComponent<AvatarManager>().RenderPrefab(newEquipment.prefabName, true);
}
public void Unequip(Equipment oldEquipment)
{
currentEquipment.Remove(oldEquipment);
gameObject.GetComponent<AvatarManager>().RenderPrefab(oldEquipment.prefabName, false);
}
public void EquipDefault()
{
foreach (Equipment equipment in defaultEquipment)
{
Equip(equipment);
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果我break;从循环if内部删除,foreach则不会添加新设备,currentEquipment并且还会收到此错误:
InvalidOperationException:集合已被修改;枚举操作可能无法执行。
为什么????对我来说完全是无稽之谈。
小智 6
使用foreach循环对其进行迭代时,无法修改集合。使用该break语句,在使用修改循环之后,循环将永远不会到达下一个迭代UnEquip(),因此不会出错。
要具有相同的功能,可以使用常规for循环遍历集合,然后使用将该集合currentEquipment.RemoveAt(i)从列表中删除。
| 归档时间: |
|
| 查看次数: |
88 次 |
| 最近记录: |