У меня есть два сценария, присоединенные к двум различным объектам игры, и в одном из них у меня есть Action
вроде этого:C# События в Unity
public class EnemeyController : MonoBehavior
{
internal Action EnemyWaveKilled;
private void OnTriggerEnter2D(Collider2D other)
{
// If hit by a bullet, kill and raise the event
EnemyWaveKilled?.Invoke();
}
}
В Start
методе моего другого сценария, я стараюсь, чтобы подписаться на этот событие таким образом:
public class GameController : MonoBehavior
{
internal int PlayerLevel;
private void Start()
{
_enemyController = GameObject.FindWithTag("Enemy").GetComponent<EnemyController>();
_enemyController.EnemyWaveKilled +=() => PlayerLevel++;
}
}
у меня есть 3 игры все объекты с тегом Enemy
в сцене.
Теперь кажется, что мой GameController
как-то случайно подписывается на мероприятие.
Чтобы быть более точным, если я печатаю EnemyWaveKilled.Target
в моем Update()
методе EnemyController
класса, он отображает одну строку сказать, что это GameController
и две строки говорят, что это null
)
Любая помощь очень ценится
Просто FYI, единство имеет [свои обертки вокруг событий] (https://docs.unity3d.com/ScriptReference/Events.UnityEvent. html), который лучше воспроизводит сериализацию, вы можете захотеть посмотреть на них. Кроме того, ваше Редактирование должно быть ответом, а не редактированием. Разве у вас еще есть вопрос? –
Спасибо. Я проверю вашу ссылку, а также обновлю вопрос – Farzad