Универсальный класс в C# не подписывается на событие классаC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Универсальный класс в C# не подписывается на событие класса

Сообщение Anonymous »

Я создаю игру Марио на C# с Unity.
В рамках нее я реализую собираемые предметы (такие как монеты, топор и жизни).
Я начал с реализации монеты и топора. монета работает хорошо. У меня есть сценарий монеты, связанный с игровым объектом монеты в редакторе Unity. у меня есть скрипт coinManager, который унаследован от общего класса с именем CollectablesManager.
вот логика монеты (и общий класс предметов коллекционирования):
CollectableManager.cs:

Код: Выделить всё

using System;
using System.Reflection;
using UnityEngine;

public class CollectableManager : MonoBehaviour where T : MonoBehaviour
{
protected int count = 0;

protected virtual void OnEnable()
{
//create delegate instance and add the handles to it

EventInfo eventInfo = typeof(T).GetEvent("OnCollision");
if (eventInfo != null)
{
Delegate handler = Delegate.CreateDelegate(eventInfo.EventHandlerType, this, "OnCollect");
eventInfo.AddEventHandler(this, handler);
}
}

protected virtual void OnDisable()
{
EventInfo eventInfo = typeof(T).GetEvent("OnCollision");
if (eventInfo != null)
{
Delegate handler = Delegate.CreateDelegate(eventInfo.EventHandlerType, this, "OnCollect");
eventInfo.RemoveEventHandler(this, handler);
}
}

protected virtual void OnCollect()
{
count++;
UpdateUI();
}

protected virtual void UpdateUI()
{

}

}
SC_Coin.cs:

Код: Выделить всё

using UnityEngine;

public class SC_Coin : MonoBehaviour
{
public delegate void CoinCollisionHandler();
public static event CoinCollisionHandler OnCollision;

private void OnTriggerEnter2D(Collider2D other)
{
if (other.CompareTag("Player"))
{
OnCollision();
Destroy(gameObject);
}
}

}
SC_CoinManager.cs:

Код: Выделить всё

using TMPro;
using UnityEngine;

public class SC_CoinsManager : CollectableManager
{
protected override void UpdateUI()
{
GameObject.Find("Txt_Coins").GetComponent().text = "X " + count.ToString();
}
}

с монетой все работает нормально.
вот логика топора:
SC_Axe.cs:

Код: Выделить всё

using System.Collections;
using UnityEngine;

public class SC_Axe : MonoBehaviour
{
public delegate void AxeCollisionHandler();
public static event AxeCollisionHandler OnCollision;

private void OnTriggerEnter2D(Collider2D other)
{
if (other.CompareTag("Player"))
{
OnCollision();
Destroy(gameObject);
}
}

}

SC_AxeManager.cs:

Код: Выделить всё

using TMPro;
using UnityEngine;

public class SC_AxeManager : CollectableManager
{
protected override void UpdateUI()
{
GameObject.Find("Txt_Axes").GetComponent().text = "X " + count.ToString();
}
}

когда я отлаживаю до момента, когда вызывается функция OnCollision() SC_Axe, я вижу, что она равна нулю. когда я делаю то же самое в SC_Coin, я вижу, что оно не равно нулю.
Я понимаю, что если событие имеет значение NULL, это потому, что никто на него не подписывается. универсальный класс подписывается на событие SC_Coin, но по какой-то причине он не подписывается на событие SC_Axe.
Я попытался выполнить отладку до начала CollectableManager, чтобы увидеть, создается ли он с SC_Axe как T. похоже, этого не происходит

Подробнее здесь: https://stackoverflow.com/questions/784 ... lass-event
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как преобразовать универсальный класс в универсальный класс объекта?
    Anonymous » » в форуме C#
    0 Ответы
    51 Просмотры
    Последнее сообщение Anonymous
  • WPF подписывается на WM_QUERYENDSESSION перед созданием окна
    Anonymous » » в форуме C#
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Как узнать, когда устройство BLE подписывается на характеристику на Android?
    Anonymous » » в форуме JAVA
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Как узнать, когда устройство BLE подписывается на характеристику на Android?
    Anonymous » » в форуме Android
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Клиент MQTT (MQTTNET) не успешно подписывается на темы, несмотря на подключение к EMQX Broker
    Anonymous » » в форуме C#
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»