Почему AddListener не перезванивает? - PullRequest
0 голосов
/ 01 апреля 2019

Я пытаюсь добавить слушатель UnityEvent к другому сценарию через код, когда я его создаю. Однако метод обратного вызова никогда не вызывается.

Я поместил оператор отладки в свой скрипт UIFader, и распечатка показывает, что UnityEvent не равен нулю, поэтому он видит слушателей. Однако метод обратного вызова в UIManager не вызывается.

UIManager.cs

public void SpawnInformationWindow()
    {
        if (canvas == null || InformationWindowPrefab == null)
        {
            return;
        }

        GameObject informationWindow = Instantiate(InformationWindowPrefab, canvas, false);
        informationWindow.GetComponent<UIFader>().OnFadeOutComplete.AddListener(SpawnTermsOfUseWindow);
    }

    public void SpawnTermsOfUseWindow()
    {
        Debug.Log("THIS RAN!");

        if (canvas == null || TermsOfUseWindowPrefab == null)
        {
            return;
        }

        GameObject termsOfUseWindow = Instantiate(TermsOfUseWindowPrefab, canvas, false);
    }

UIFader.cs

void CompleteFadeOut()
        {
            Debug.Log("Fadeout Complete! " + OnFadeOutComplete == null);

            if (OnFadeOutComplete != null)
                OnFadeInComplete.Invoke();

            if (destroyOnFadeOut)
                Destroy(gameObject);
            else if (mode == FadeMode.PingPong)
                FadeIn();
            else
            {
                mode = FadeMode.None;
                currentState = FadeMode.None;
            }
        }

1 Ответ

3 голосов
/ 01 апреля 2019

Вы вызываете OnFadeInComplete вместо OnFadeOutComplete.

Кстати, если ваша версия Unity поддерживает C # 6.0, вы можете написать

OnFadeOutComplete?.Invoke();

Она проверяет на ноль и защищаетиз таких ошибок.

В старых версиях вы можете написать метод расширения для Action и Action <T>:

public static class ActionExtension {
    public static void _ (this Action f) {
        if (f != null) f();
    }
}

и написать что-то как

OnFadeOutComplete._();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...