2016-09-30 2 views
0

У меня есть два сценария, присоединенные к двум различным объектам игры, и в одном из них у меня есть 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)

Любая помощь очень ценится

+0

Просто FYI, единство имеет [свои обертки вокруг событий] (https://docs.unity3d.com/ScriptReference/Events.UnityEvent. html), который лучше воспроизводит сериализацию, вы можете захотеть посмотреть на них. Кроме того, ваше Редактирование должно быть ответом, а не редактированием. Разве у вас еще есть вопрос? –

+0

Спасибо. Я проверю вашу ссылку, а также обновлю вопрос – Farzad

ответ

0

Я думаю, что я знать, что происходит. У меня есть 3 объекта с одним и тем же тегом, но я только подписываюсь на один из них; Вот почему я вижу два null значения (и одно значение не- null)