- Home /
Quality Menu Not working
I created a quality Settings with the options.
Resolution(DropDown)
FullScreenMode(Toggle)
Quality(DropDown)
AntiAliasing(DropDown)
VSync(DropDown)
You are able to change the settings in game and then Apply them and they would save. However, only 2 of the options work perfectly while 2 sorta works and the others don't.
The options that work are the Vsync and the FullScreenMode Toggle
The first option that sorta works is the Resolution Dropdown. The resolution is able to be saved and changed however in the drop-down menu it just shows the first resolution. Heres an example. I pick 1920 x 1080 and it saves as the resolution. But in the game, it says the resolution is 640 x 480
The second option that sorta works is AntiAliasing. I am able to change the value (Low, Medium, High) however, even if i save my settings, when I quit or load another scene it goes back to the default which is high.
The option that does not work and messes up everything is the quality option. Its default is set to high but when I change it to medium or low, any UI object is hidden in every scene, yet still intractable. The quality does change and is able to be saved.
I don't know if its a problem with the UI or with my script.
The quality Setting script:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System.IO;
using UnityEngine.Audio;
public class SettingManager : MonoBehaviour {
public Dropdown Vsync;
public Dropdown resolutionDropdown;
public Toggle windowToggle;
public Dropdown AAdropdown;
public Dropdown qualitySettings;
public AudioMixer Music;
public AudioMixer SFX;
public Resolution[] resolutions;
public GameSettings gameSettings;
/// <summary>
/// Options
/// </summary>
void OnEnable()
{
gameSettings = new GameSettings();
windowToggle.onValueChanged.AddListener(delegate { OnFullscreenToggle(); });
resolutionDropdown.onValueChanged.AddListener(delegate { OnResolutionChange(); });
qualitySettings.onValueChanged.AddListener(delegate { OnTextureQualityChange(); });
AAdropdown.onValueChanged.AddListener(delegate { OnAntiAliasingChange(); });
Vsync.onValueChanged.AddListener(delegate { OnvSyncChange(); });
LoadSettings();
resolutions = Screen.resolutions;
foreach(Resolution resolution in resolutions)
{
resolutionDropdown.options.Add(new Dropdown.OptionData(resolution.ToString()));
}
}
public void OnFullscreenToggle()
{
gameSettings.fullscreen = Screen.fullScreen = windowToggle.isOn;
}
public void OnResolutionChange()
{
Screen.SetResolution(resolutions[resolutionDropdown.value].width, resolutions[resolutionDropdown.value].height, Screen.fullScreen);
gameSettings.resolutionIndex = resolutionDropdown.value;
}
public void OnTextureQualityChange()
{
QualitySettings.masterTextureLimit = gameSettings.textureQuality = qualitySettings.value;
}
public void OnAntiAliasingChange()
{
QualitySettings.antiAliasing = (int)Mathf.Pow(2, AAdropdown.value);
gameSettings.antialiasing = AAdropdown.value;
}
public void OnvSyncChange()
{
QualitySettings.vSyncCount = gameSettings.vSync = Vsync.value;
}
public void SetVolumeMusic(float volume)
{
Music.SetFloat("Music", volume);
}
public void SetVolumeSFX(float volume1)
{
SFX.SetFloat("SFX", volume1);
}
public void SaveSettings()
{
string jsonData = JsonUtility.ToJson(gameSettings, true);
File.WriteAllText(Application.persistentDataPath + "/gamesettings.json", jsonData);
}
public void LoadSettings()
{
if (File.Exists(Application.persistentDataPath + "/gamesettings.json") == true)
{
File.ReadAllText(Application.persistentDataPath + "/gamesettings.json");
gameSettings = JsonUtility.FromJson<GameSettings>(File.ReadAllText(Application.persistentDataPath + "/gamesettings.json"));
}
else
{
Debug.LogError("Cannot load game data");
}
AAdropdown.value = gameSettings.resolutionIndex;
Vsync.value = gameSettings.vSync;
qualitySettings.value = gameSettings.textureQuality;
resolutionDropdown.value = gameSettings.resolutionIndex;
windowToggle.isOn = gameSettings.fullscreen;
resolutionDropdown.RefreshShownValue();
}
}
And the json script that saves the settings.
[System.Serializable]
public class GameSettings {
public bool fullscreen;
public int textureQuality;
public int antialiasing;
public int vSync;
public int resolutionIndex;
}
Answer by theonciest · Apr 01, 2019 at 08:21 AM
why does nobody help and reply to these issues?
Please don't answer a question if you are just going to put something useless, ins$$anonymous$$d use comments, because otherwise this question will be shown as having 1 answer which draws other people with the same question, only to find that there is actually not an answer.