@Ilya_malet

Почему не работают кнопки UI?

Делаю 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-ами. Много раз проверял ничего не нахожу.
  • Вопрос задан
  • 267 просмотров
Решения вопроса 1
@Almost
Измените название функции с OnAnable на OnEnable
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы