У меня есть функция (прикручена к нажатию кнопки), которая должна включать/отключать весь звук на сцене (ну и сохранять наличие/отсутствие звука в PlayerPrefs). Она работает абсолютно на рандом, хочет - только работает mute = true, хочет - только mute = false (это меняется при обновлении скрипта). Я никак не могу понять почему.
Функция: (MusicBtn - кнопка звука, нужна только для смены иконки)
// using System.Linq
public void OnOffMusic()
{
if (PlayerPrefs.GetString("Music") == "off")
{
PlayerPrefs.SetString("Music", "on");
MusicBtn.image.sprite = MusicOn;
}
else
{
PlayerPrefs.SetString("Music", "off");
MusicBtn.image.sprite = MusicOff;
}
FindObjectsOfType<AudioSource>().All(audio => audio.mute != audio.mute);
}
Кнопка:
!!! Сразу 5 оговорок:
Extensions:
public static IEnumerator Mute(this AudioSource audioSource)
{
yield return new WaitForSeconds(0.01f);
audioSource.mute = true;
}
public static IEnumerator Unmute(this AudioSource audioSource)
{
yield return new WaitForSeconds(0.01f);
audioSource.mute = false;
}
Start():
if (PlayerPrefs.HasKey("Music"))
{
if (PlayerPrefs.GetString("Music") == "off")
{
FindObjectsOfType<AudioSource>().All(audio => audio.mute = true);
MusicBtn.image.sprite = MusicOn;
}
}
else
{
PlayerPrefs.SetString("Music", "on");
}
Что делать???
Вы написали расширяющий метод используя итератор, в качестве возвращаемого значения:
public static IEnumerator Mute(this AudioSource audioSource)
{
yield return new WaitForSeconds(0.01f);
audioSource.mute = true;
}
Поэтому при при вызове audioSource.Mute() у вас не запустится корутина, а просто вернётся итератор, который вам самостоятельно придётся "двигать", чтобы поток выполнения кода дошёл до вашего заветного
audioSource.mute = true;
Решением будет заменить audioSource.Mute() на
StartCoroutine(audioSource.Mute());
В принципе, если у вас уже всё так и написано и я несу очевидные вещи, то прошу прислать больше данных.
Так же советую проверить массив FindObjectsOfType<AudioSource>()
на наличие в нём элементов.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Хочу сделать свою программу многостраничнойДля этого я назначил кнопке событие по переключению страниц
Пишу простой tweener на UnityДвижок предоставляет классы (компоненты) для рендера, и у тех, что я использую есть свойство color, но эти классы не наследуются...
Как в laravel сделать если не авторизован пользователь и вызвать Auth::user()->id; то возвращается ошибка Trying to get property of non-object как ее заменить на свое...
Подскажите, пожалуйста, есть ли возможность задать условие когда определенный атрибут данного товара равен чему-то, то вывести изображение,...