Делаю UI интерфейс для игры, подписываюсь на события кнопок при помощи AddListener(). При нажатие на кнопку "Играть" ничего не происходит, хотя кнопка нажимается. Что это может быть?
public class StartScreen : MonoBehaviour
{
[SerializeField] private CanvasGroup CanvasGroup;
[SerializeField] private Button StartButton;
[SerializeField] private Button QuitButton;
public event UnityAction StartButtonClick;
public event UnityAction QuitButtonClick;
private void OnAnable()
{
StartButton.onClick.AddListener(OnStartButtonClick);
QuitButton.onClick.AddListener(OnQuitButtonClick);
}
private void OnDisable()
{
StartButton.onClick.RemoveListener(OnStartButtonClick);
QuitButton.onClick.RemoveListener(OnQuitButtonClick);
}
public void Open()
{
CanvasGroup.alpha = 1;
StartButton.interactable = true;
QuitButton.interactable = true;
}
public void Close()
{
CanvasGroup.alpha = 0;
StartButton.interactable = false;
QuitButton.interactable = false;
}
private void OnStartButtonClick()
{
Debug.Log("1");
StartButtonClick?.Invoke();
}
private void OnQuitButtonClick()
{
QuitButtonClick?.Invoke();
}
}
public class Game : MonoBehaviour
{
[SerializeField] private StartScreen _startScreen;
[SerializeField] private GameOverScreen _gameOverScreen;
[SerializeField] private Player _player;
private void OnAnable()
{
_startScreen.StartButtonClick += OnStartButtonClick;
_startScreen.QuitButtonClick += OnQuitButtonClick;
_gameOverScreen.RestartButtonClick += OnRestartButtonClick;
_gameOverScreen.QuitButtonClick += OnQuitButtonClick;
_player.GameOver += OnGameOver;
}
private void OnDisable()
{
_startScreen.StartButtonClick -= OnStartButtonClick;
_startScreen.QuitButtonClick -= OnQuitButtonClick;
_gameOverScreen.RestartButtonClick -= OnRestartButtonClick;
_gameOverScreen.QuitButtonClick -= OnQuitButtonClick;
_player.GameOver -= OnGameOver;
}
private void Start()
{
_gameOverScreen.Close();
Time.timeScale = 0;
_startScreen.Open();
}
private void OnStartButtonClick()
{
_startScreen.Close();
Time.timeScale = 1;
}
private void OnRestartButtonClick()
{
SceneManager.LoadScene(0);
_gameOverScreen.Close();
Time.timeScale = 1;
}
private void OnQuitButtonClick()
{
Application.Quit();
}
private void OnGameOver()
{
Time.timeScale = 0;
_gameOverScreen.Open();
}
}
Также имеется класс GameOverScreen , но он аналогичен класcу StartOverScreen только кнопка Restart. Компонент Game вешается на камеру, а GameOverScreen и StartOverScreen на Panel-и c CanvasGroup-ами. Много раз проверял ничего не нахожу.