Зачем делегировать событие show NullReferenceException? - PullRequest
0 голосов
/ 21 февраля 2019

Я следую инструкциям по написанию кода, но все равно показываю эту ошибку, скрипт уже прикреплен к игровому объекту Gamecontroller

GameUI

Error

1 Ответ

0 голосов
/ 21 февраля 2019

Эта проблема вызвана порядком выполнения функций событий.

Когда я проверял журналы, OnEnable из GameUI вызывалось до Awake из GameController.Таким образом, GameController.instance равно нулю, когда вы получаете доступ к GameController.instance.OnGameInfoChanged в void OnEnable() в GameUI.cs.

В Руководстве Unity по порядку выполнения функций событий , оно говорит, что Awake - этодо OnEnable, я думаю, это не всегда гарантирует.

Итак, я думаю, вам лучше изменить GameUI.cs, как показано ниже.

public class GameUI : MonoBehaviour
{
    public Text timeLabel;

    private bool isInitialized = false;

    void Start()
    {
        isInitialized = true;
        GameController.instance.OnGameInfoChanged += this.OnGameInfoChanged;
    }

    void OnEnable()
    {
        if (isInitialized)
            GameController.instance.OnGameInfoChanged += this.OnGameInfoChanged;
    }

    void OnDisable()
    {
        GameController.instance.OnGameInfoChanged -= this.OnGameInfoChanged;
    }

    void OnGameInfoChanged(GameType type)
    {
        //...
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...