Почему событие NULL, если подписка была
Событие:
public class Inventory
{
public List<Item> ItemList;
public event EventHandler OnItemListChanged;
public void CheckEvent()
{
if (OnItemListChanged == null)
{
Debug.Log("Event is null!");
}
else if (OnItemListChanged != null)
{
Debug.Log("Event is not null!");
}
}
public void AddItem(Item item)
{
ItemList.Add(item);
CheckEvent();
OnItemListChanged?.Invoke(this, EventArgs.Empty);
}
Подписка:
public class UI_Inventory : MonoBehaviour
{
private Inventory _inventory;
public void SetInventory(Inventory inventory) // вызывается при создании инвентаря
{
_inventory = inventory;
_inventory.OnItemListChanged += Inventory_OnItemListChanged;
_inventory.CheckEvent();
RefreshInventoryItems();
}
private void Inventory_OnItemListChanged(object sender, EventArgs e)
{
RefreshInventoryItems();
}
public void RefreshInventoryItems()
{
}
Во время подписки событие не пустое, но во время вызова оно пустое.
Ответы (1 шт):
Автор решения: frozengrimm
→ Ссылка
Не знаю как работают классы Unity. Но как вариант создай конструктор класса Inventory и инициализируй в нем все нужные переменные:
public class Inventory
{
public event EventHandler OnItemListChanged;
public List<Item> ItemList;
public Inventory()
{
this.ItemList = new List<Item>();
this.OnItemListChanged = new EventHandler((sender, args) => { /* event logic */ });
}
// do other stuff
}