Эта проблема вызвана порядком выполнения функций событий.
Когда я проверял журналы, 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)
{
//...
}
}