@SkyCrusher

Почему этот код выполняется только один раз?

Суть проблемы вот в чём. Хочу запилить простенькую анимацию (поворот на 180 по х) для кнопки выключения звука. И когда запускаю и первый раз на неё жму, анимация проигрывается, спрайт меняется, компонент отключается. Словом всё работает. Но далее - вообще никак не реагирует на нажатие. Объясните, пожалуйста, что не так.

Пробовал: останавливать корутины(StopCoroutine(RotateMe(new Vector3(180, 0, 0), 0.5f)))); писал StopAllCoroutines() и в условии, и в теле корутины; разбивал условие на два разных скрипта. Результата очевидно нет...

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class SoundButtonOff : MonoBehaviour
{
    public GameObject Audio;
    public bool SoundOff = false;

    public Sprite SpriteSoundOff;
    public Sprite SpriteSoundOn;

    private void Start()
    {
        GetComponent<Image>().sprite = SpriteSoundOff;
    }

    public void OnClickSound()
    {
        if (!SoundOff)
        {
            Audio.GetComponent<AudioListener>().enabled = true;
            StartCoroutine(RotateMe(new Vector3(180, 0, 0), 0.5f));
            GetComponent<Image>().sprite = SpriteSoundOn;
            SoundOff = true;
        }
        else if (SoundOff)
        {
            Audio.GetComponent<AudioListener>().enabled = false;
            StartCoroutine(RotateMe(new Vector3(180, 0, 0), 0.5f));
            GetComponent<Image>().sprite = SpriteSoundOff;
            SoundOff = false;
        }
    }

    IEnumerator RotateMe(Vector3 byAngles, float inTime)
    {
        var fromAngle = transform.rotation;
        var toAngle = Quaternion.Euler(transform.eulerAngles + byAngles);
        for (var t = 0f; t < 1; t += Time.deltaTime / inTime)
        {
            transform.rotation = Quaternion.Lerp(fromAngle, toAngle, t);
            yield return null;
        }
    }
}
  • Вопрос задан
  • 416 просмотров
Решения вопроса 1
AnotherAltr
@AnotherAltr
C# Dev
Мало информации о скрипте.
На каком объекте он висит?
Функция OnClickSound где вызывается?

Вижу что это новый UI.
В нопке через редактор нужно указать экшен (компонент кнопки, список On Click)

Если это не кнопка, нужно реализовывать интерфейс IPointerClickHandler если это просто Image и в функции OnPointerClick обрабатывать нажатие.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@koito_tyan
попробуй просто для теста прикрутить private void Update() { }
Ответ написан
@abramovskih
Audio.GetComponent().enabled = false; Отключает слушателя! Перестает реагировать на нажатия.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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