Не понимаю почему сохранение не работает, скинул весь скрипт, обратите внимание например на функцию MusicVolumeSet, и в старте на её загрузку, я вроде все правильно написал (MusicVolumeSet выполняется при смене значения в слайдере) сама функция работает отлично, т.е. звук меняется, и MusicVolumeFloat меняет своё значение(наблюдал в инспекторе) выключаю и запускаю сцену и вижу что значения сбросились. На сайте мой первый вопрос, и в программировании не очень шарю, извините если что-то не правильно написал. (если-что не обращайте внимания что я сделал сохранение графики, она в юнити сама вроде сохраняется, но мне просто это нужно было сделать, долго писать зачем, и это не нужно думаю.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class MainGameScript : MonoBehaviour
{
// Int
// Bool
// Float
// Slider
// ScrollBar
public Scrollbar SettingsScrollBar;
// GameObject
// PauseGameObject - start
public GameObject PausePanel;
public GameObject DefaultCanvas;
public GameObject SettingsPanel;
public GameObject ExitPanel;
public GameObject CameraWithBlurEffect;
// PauseScript - start
public void Pause()
{
Time.timeScale = 0;
PausePanel.SetActive(true);
DefaultCanvas.SetActive(false);
ExitPanel.SetActive(false);
SettingsPanel.SetActive(false);
CameraWithBlurEffect.SetActive(true);
}
public void PauseContinue()
{
Time.timeScale = 1;
PausePanel.SetActive(false);
DefaultCanvas.SetActive(true);
CameraWithBlurEffect.SetActive(false);
}
public void ActivateSettingsPanel()
{
ExitPanel.SetActive(false);
SettingsPanel.SetActive(true);
SettingsScrollBar.value = 1;
}
public void ActivateExitPanel()
{
SettingsPanel.SetActive(false);
ExitPanel.SetActive(true);
}
public Slider QualitySlider;
private int QualityInt;
public void SetQuality()
{
QualitySettings.SetQualityLevel((int)QualitySlider.value, true);
QualityInt = (int)QualitySlider.value;
PlayerPrefs.SetInt("QualityInt", QualityInt);
PlayerPrefs.Save();
}
public Slider MusicSliderVolume;
public float MusicVolumeFloat;
public void MusicVolumeSet()
{
AudioListener.volume = MusicSliderVolume.value;
MusicVolumeFloat = MusicSliderVolume.value;
PlayerPrefs.SetFloat("MusicVolume", MusicVolumeFloat);
PlayerPrefs.Save();
}
// PauseScript - End
// MusicScript - start
private int Music;
private bool NowMusicIsPlay;
public GameObject Music1;
public GameObject Music2;
public GameObject Music3;
public GameObject Music4;
private int RandomMusic;
public Slider MusicSlider;
// как часто будет играть музыка
public void MusicRandomPlay()
{
RandomMusic = (int)MusicSlider.value;
}
// MusicScript - end
// MainScript - start
private void FixedUpdate()
{
// MusicScript - start
if (NowMusicIsPlay == false)
{
Music = Random.Range(1, RandomMusic);
if (Music == 1)
{
Music1.SetActive(true);
NowMusicIsPlay = true;
}
if (Music == 2)
{
Music2.SetActive(true);
NowMusicIsPlay = true;
}
if (Music == 3)
{
Music3.SetActive(true);
NowMusicIsPlay = true;
}
if (Music == 4)
{
Music4.SetActive(true);
NowMusicIsPlay = true;
}
}
if (NowMusicIsPlay == true)
{
if (Music1 == false && Music2 == false && Music3 == false && Music4 == false)
{
NowMusicIsPlay = false;
}
}
// MusicScript - end
}
void Start()
{
// PauseScript - start
if (PlayerPrefs.HasKey("QualityInt"))
{
QualityInt = PlayerPrefs.GetInt("QualityInt");
QualitySlider.value = QualityInt;
QualitySettings.SetQualityLevel((int)QualitySlider.value, true);
}
if (PlayerPrefs.HasKey("MusicVolume"))
{
MusicVolumeFloat = PlayerPrefs.GetFloat("MusicVolume");
MusicSlider.value = MusicVolumeFloat;
MusicVolumeSet();
}
// PauseScript - end
}
private void OnApplicationQuit()
{
PlayerPrefs.Save();
}
// MainScript - end
}
выполняется при смене значения в слайдере
Нет, впиши туда Debug.Log("Change");
ради прикола.
Помимо всего, код-вермишель. Как должно быть:
Этот класс загружает/хранит/сохраняет
public class AudioValue { // Singaleton паттерн
private const string MusicValueKey = "MusicValue";
private static AudioValue _instance;
private float _musicValue;
public static AudioValue Instance {
get {
if (_instance == null)
_instance = new AudioValue();
return _instance;
}
}
public float MusicValue {
get { return _musicValue; }
set {
if (_musicValue != value) {
_musicValue = value;
PlayerPrefs.SetFloat(MusicValueKey, _musicValue);
PlayerPrefs.Save();
}
}
}
private AudioValue () { // приватный конструктор запрещает создание из вне
if (PlayerPrefs.HasKey(MusicValueKey))
_musicValue = PlayerPrefs.GetFloat(MusicValueKey);
else
MusicValue = 1;
}
}
А это компанент для слайдера.
Этот класс реагирует на слайдер
[DisallowMultipleComponent]
[RequireComponent(typeof(Slider))]
public class MusicSlider : MonoBehaviour {
private Slider _slider;
private void Awake () {
_slider = GetComponent<Slider>();
_slider.value = AudioValue.Instance.MusicValue;
_slider.onValueChanged.AddListener(SliderChange); // подписка на событие изменения слайдера
}
private void SliderChange (float value) {
AudioValue.Instance.MusicValue = value;
}
}
И никаких MainGameScript
!
На старте я вообще присваивал значение не тому слайдеру, и потом в старте выполнял MusicVolumeSet() т.к. слайдер который нужен был не тронут, то его значение 0, соответственно громкость музыки и переменная MusicVolumeFloat присваивали значение 0, что с другими скриптами я пока не смотрел, думаю там также что-то натворил...
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Попробовал открыть проект aspnet core 2
Есть скрипт он проверяет есть ли объект на позиции - Если нет то Создает его Если есть то ИгнорируетНо проблема в том что он не может найти...
Есть несколько страниц, где никудышный показатель CLS в Google Page SpeedКонтент на страницах - текст, изображение, много текста
всем привет! не могу понять как решить эту проблему если есть решения, не работает подсказки и автозаполнения в обратных кавычках в JS файлеможно...