【发布时间】:2021-03-29 22:59:27
【问题描述】:
有人可以帮我解决这个问题吗? 这是我的代码:
private void Update()
{
if (General.UpdateActive == true)
{
if (General.charActive == 0)
{
for (int i = 0; i < CharacterItem.equipmentSlots; i++)
{
CharacterItem.MC_EquipmentSlots[i].OnDropEvent += slot => OnDropEvent(slot);
CharacterItem.Merc1_EquipmentSlots[i].OnDropEvent -= slot => OnDropEvent(slot);
CharacterItem.Merc2_EquipmentSlots[i].OnDropEvent -= slot => OnDropEvent(slot);
CharacterItem.Merc3_EquipmentSlots[i].OnDropEvent -= slot => OnDropEvent(slot);
}
}
else if (General.charActive == 1)
{
for (int i = 0; i < CharacterItem.equipmentSlots; i++)
{
}
}
对于 Mer1,同上,但将 MC 部分更改为 -=,将 Merc1 部分更改为 += 问题是当我选择其他字符时事件处理程序不会取消订阅。 当我选择 MC 时,它会在 MC_EquipmentSlots 中添加事件,然后当我选择 Merc1 时,MC_EquipmentSlots 仍然有它的事件。
而令人困惑的部分是,当我循环浏览字符时,口袋里的代码会按预期工作。我试图将口袋代码复制到设备代码,但仍然出现我之前提到的错误。
CharacterItem.MC_PocketSlots[i].OnDropEvent += slot => EventHelper(slot, OnDropEvent);
CharacterItem.Merc1_PocketSlots[i].OnDropEvent -= slot => EventHelper(slot, OnDropEvent);
CharacterItem.Merc2_PocketSlots[i].OnDropEvent -= slot => EventHelper(slot, OnDropEvent);
CharacterItem.Merc3_PocketSlots[i].OnDropEvent -= slot => EventHelper(slot, OnDropEvent);
请帮助并提前感谢您。
【问题讨论】:
-
当你写
slot => OnDropEvent(slot)时,你动态地创建了一个函数。下次你写slot => OnDropEvent(slot)时,你动态地创建另一个函数(这与第一个函数不同)。因此,您正在尝试从未添加到此事件的事件中删除处理函数。
标签: unity3d events unsubscribe