Files
Fishing2/Assets/@PaulosCreations/AudioVideoOptionsMenu/_URP_Pack/Scripts/GraphicsSettingsMenu_URP.cs
2025-05-29 18:03:24 +08:00

817 lines
34 KiB
C#

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Rendering.Universal;
using System.IO;
using TMPro;
namespace PaulosVideoMenu_URP
{
public class GraphicsSettingsMenu_URP : MonoBehaviour
{
public enum SaveFormat { playerprefs, iniFile };
[Space(10)]
public SaveFormat saveFormat;
[Header("Set True for IOS or Windows Store Apps.")]
public bool usePersistentDatapath; //Use Persistent for "IOS" and "Windows Store Apps" or if you prefer to saves the file in a seperate persistent Folder.
[Header("Select wich settings you want to use. Settings set to[UnUsed] can be removed from/disabled in the menu UI")]
[Space(10)]
[SerializeField]
private SettingsUsedState qualityLevelUsed;
[SerializeField]
private SettingsUsedState resolutionUsed, renderScaleUsed, windowedModeUsed, vSyncUsed, antiAliasingUsed, textureQualityUsed, anisotropicModeUsed, anisotropicLvlUsed;
[Header("Values to use on Reset or if no values are saved")]
[SerializeField]
private MenuVariables_URP DefaultSettings = new MenuVariables_URP();
private MenuVariablesSimple_URP DefaultSettingsConverted = new MenuVariablesSimple_URP();
private MenuVariablesSimple_URP CurrentSettings = new MenuVariablesSimple_URP();
[Header("UI elements references")]
[Space(10)]
[SerializeField]
private TMP_Text qualityLevelText;
[SerializeField]
private TMP_Text resolutionText, windowedModeText, renderScaleText, vsyncText, antiAliasingText, textureQualityText, anisoFilteringModeText, anisoFilteringLevelText;
[SerializeField]
private Slider renderScaleSlider;
[SerializeField]
private GameObject anisoLevelObj;
private string saveFileDataPath;
private List<Resolution> availableResolutions = new List<Resolution>();
private int currentResolutionIndex;
private bool initiated, isApplying;
private void Awake()
{
#if UNITY_EDITOR
if (UnityEngine.EventSystems.EventSystem.current == null)
Debug.LogWarning("There is no Event System in the scene !! UI Elements can not detect input.");
#endif
//Use Persistent for "IOS" and "Windows Store Apps" or if you prefer to saves the file in a seperate persistent Folder.
if (!usePersistentDatapath)
saveFileDataPath = Application.dataPath + "/QualitySettings.ini";//puts the file in the games/applications folder.
else saveFileDataPath = Application.persistentDataPath + "/QualitySettings.ini";
//get available resolutions and filter them.
Resolution[] availableResolutionsAll = Screen.resolutions;//checking the available resolution options.
//we get every resolution with every available refreshrate, we only need the resolution ones.
float resX = 0, resY = 0;
for (int i = 0; i < availableResolutionsAll.Length; i++)
{
if (resX != availableResolutionsAll[i].width && resY != availableResolutionsAll[i].height)
{
resX = availableResolutionsAll[i].width;
resY = availableResolutionsAll[i].height;
availableResolutions.Add(availableResolutionsAll[i]);
}
}
availableResolutionsAll = null;
ConvertDefaultSettings();
LoadMenuVariables();
initiated = true;
}
//converting the easier to read settings class to the easyer to use in script settings class
private void ConvertDefaultSettings()
{
DefaultSettingsConverted.Qualitylevel = DefaultSettings.Qualitylevel;
if (DefaultSettings.Resolution.x == 0 || DefaultSettings.Resolution.y == 0)
{
DefaultSettingsConverted.ResolutionX = Screen.width;
DefaultSettingsConverted.ResolutionY = Screen.height;
}
else
{
DefaultSettingsConverted.ResolutionX = DefaultSettings.Resolution.x;
DefaultSettingsConverted.ResolutionY = DefaultSettings.Resolution.y;
}
DefaultSettingsConverted.RenderScale = DefaultSettings.RenderScale;
switch (DefaultSettings.WindowedMode)
{
case FullScreenMode.ExclusiveFullScreen:
DefaultSettingsConverted.WindowedMode = 0;
break;
case FullScreenMode.FullScreenWindow:
DefaultSettingsConverted.WindowedMode = 1;
break;
case FullScreenMode.MaximizedWindow:
DefaultSettingsConverted.WindowedMode = 2;
break;
case FullScreenMode.Windowed:
DefaultSettingsConverted.WindowedMode = 3;
break;
}
switch (DefaultSettings.VSync)
{
case VSyncEnum.off:
DefaultSettingsConverted.VSync = 0;
break;
case VSyncEnum.full:
DefaultSettingsConverted.VSync = 1;
break;
case VSyncEnum.half:
DefaultSettingsConverted.VSync = 2;
break;
}
switch (DefaultSettings.AntiAliaslevel)
{
case AntiAliasLevelEnum.off:
DefaultSettingsConverted.AntiAliaslevel = 0;
break;
case AntiAliasLevelEnum.x2:
DefaultSettingsConverted.AntiAliaslevel = 2;
break;
case AntiAliasLevelEnum.x4:
DefaultSettingsConverted.AntiAliaslevel = 4;
break;
case AntiAliasLevelEnum.x8:
DefaultSettingsConverted.AntiAliaslevel = 8;
break;
}
switch (DefaultSettings.TextureQuality)
{
case TextureQualityEnum.FullRes:
DefaultSettingsConverted.TextureQuality = 0;
break;
case TextureQualityEnum.HalfRes:
DefaultSettingsConverted.TextureQuality = 1;
break;
case TextureQualityEnum.QuarterRes:
DefaultSettingsConverted.TextureQuality = 2;
break;
case TextureQualityEnum.EighthRes:
DefaultSettingsConverted.TextureQuality = 3;
break;
}
switch (DefaultSettings.AnisotropicMode)
{
case AnisotropicFiltering.Disable:
DefaultSettingsConverted.AnisotropicMode = 0;
break;
case AnisotropicFiltering.Enable:
DefaultSettingsConverted.AnisotropicMode = 1;
break;
case AnisotropicFiltering.ForceEnable:
DefaultSettingsConverted.AnisotropicMode = 2;
break;
}
switch (DefaultSettings.AnisotropicLevel)
{
case AnisotropicLevelEnum.x2:
DefaultSettingsConverted.AnisotropicLevel = 2;
break;
case AnisotropicLevelEnum.x4:
DefaultSettingsConverted.AnisotropicLevel = 4;
break;
case AnisotropicLevelEnum.x8:
DefaultSettingsConverted.AnisotropicLevel = 8;
break;
case AnisotropicLevelEnum.x16:
DefaultSettingsConverted.AnisotropicLevel = 16;
break;
default:
break;
}
DefaultSettingsConverted.Warning = DefaultSettings.WarningMessage;
CurrentSettings.Warning = DefaultSettings.WarningMessage;
}
#region Button functions
public void UI_SetQualityLevel(int _addSubtract) //changes the general Quality setting without changing the Vsync,Antialias or Anisotropic settings.
{
if (qualityLevelUsed == SettingsUsedState.notUsed || isApplying)
return;
CurrentSettings.Qualitylevel += _addSubtract;
CurrentSettings.Qualitylevel = Mathf.Clamp(CurrentSettings.Qualitylevel, 0, QualitySettings.names.Length - 1);
if (CurrentSettings.Qualitylevel != QualitySettings.GetQualityLevel())
{
//Changing Quality Levels overrides all changed settings.
//We have to apply all of them again.
ApplySettings(CurrentSettings);
}
}
public void UI_SetResolution(int _addSubtract)
{
if (resolutionUsed == SettingsUsedState.notUsed || isApplying)
return;
currentResolutionIndex += _addSubtract;
//loop around
if (currentResolutionIndex < 0)
currentResolutionIndex = availableResolutions.Count - 1;
else if (currentResolutionIndex >= availableResolutions.Count)
currentResolutionIndex = 0;
CurrentSettings.ResolutionX = availableResolutions[currentResolutionIndex].width;
CurrentSettings.ResolutionY = availableResolutions[currentResolutionIndex].height;
//can`t change resolution without setting FullScreenMode.
switch (CurrentSettings.WindowedMode)
{
case 0:
Screen.SetResolution(CurrentSettings.ResolutionX, CurrentSettings.ResolutionY, FullScreenMode.ExclusiveFullScreen);
break;
case 1:
Screen.SetResolution(CurrentSettings.ResolutionX, CurrentSettings.ResolutionY, FullScreenMode.FullScreenWindow);
break;
case 2:
Screen.SetResolution(CurrentSettings.ResolutionX, CurrentSettings.ResolutionY, FullScreenMode.MaximizedWindow);
break;
case 3:
Screen.SetResolution(CurrentSettings.ResolutionX, CurrentSettings.ResolutionY, FullScreenMode.Windowed);
break;
}
resolutionText.SetText("{0}x{1}", CurrentSettings.ResolutionX, CurrentSettings.ResolutionY);
}
public void UI_SetRenderScale(Slider _slider)
{
if (renderScaleUsed == SettingsUsedState.notUsed || isApplying)
return;
CurrentSettings.RenderScale = _slider.value / 10;
UniversalRenderPipelineAsset URPAsset = QualitySettings.GetRenderPipelineAssetAt(QualitySettings.GetQualityLevel()) as UniversalRenderPipelineAsset;
URPAsset.renderScale = CurrentSettings.RenderScale;
URPAsset = null;
renderScaleText.text = CurrentSettings.RenderScale.ToString();
}
public void UI_SetWindowedMode(int _windowedMode)
{
if (windowedModeUsed == SettingsUsedState.notUsed || isApplying)
return;
CurrentSettings.WindowedMode = _windowedMode;
switch (CurrentSettings.WindowedMode)
{
case 0:
Screen.fullScreenMode = FullScreenMode.ExclusiveFullScreen;
windowedModeText.text = "FullScreen";
break;
case 1:
Screen.fullScreenMode = FullScreenMode.FullScreenWindow;
windowedModeText.text = "FullScreen Windowed";
break;
case 2:
Screen.fullScreenMode = FullScreenMode.MaximizedWindow;
windowedModeText.text = "Maximized Windowed";
break;
case 3:
Screen.fullScreenMode = FullScreenMode.Windowed;
windowedModeText.text = "Windowed";
break;
}
}
public void UI_SetVSync(int _vSync)
{
if (vSyncUsed == SettingsUsedState.notUsed || isApplying)
return;
CurrentSettings.VSync = _vSync;
QualitySettings.vSyncCount = CurrentSettings.VSync;
switch (_vSync)
{
case 0:
vsyncText.text = "Off";
break;
case 1:
vsyncText.text = "Full";
break;
case 2:
vsyncText.text = "Half";
break;
}
}
public void UI_SetAntiAliasing(int _antiAliaslevel)
{
if (antiAliasingUsed == SettingsUsedState.notUsed || isApplying)
return;
CurrentSettings.AntiAliaslevel = _antiAliaslevel;
UniversalRenderPipelineAsset URPAsset = QualitySettings.GetRenderPipelineAssetAt(QualitySettings.GetQualityLevel()) as UniversalRenderPipelineAsset;
URPAsset.msaaSampleCount = CurrentSettings.AntiAliaslevel;
if (CurrentSettings.AntiAliaslevel != 0)
antiAliasingText.SetText("{0}x", CurrentSettings.AntiAliaslevel);
else antiAliasingText.text = "Off";
URPAsset = null;
}
public void UI_SetTextureQuality(int _textureQuality)
{
if (textureQualityUsed == SettingsUsedState.notUsed || isApplying)
return;
CurrentSettings.TextureQuality = _textureQuality;
QualitySettings.globalTextureMipmapLimit = CurrentSettings.TextureQuality;
switch (CurrentSettings.TextureQuality)
{
case 0:
textureQualityText.text = "Full";
break;
case 1:
textureQualityText.text = "Half";
break;
case 2:
textureQualityText.text = "Quarte";
break;
case 3:
textureQualityText.text = "Eighth";
break;
}
}
public void UI_SetAnisotropicMode(int _anisotropicMode)
{
if (anisotropicModeUsed == SettingsUsedState.notUsed || isApplying)
return;
CurrentSettings.AnisotropicMode = _anisotropicMode;
switch (CurrentSettings.AnisotropicMode)
{
case 0:
QualitySettings.anisotropicFiltering = AnisotropicFiltering.Disable;
anisoFilteringModeText.text = "Disabled";
anisoLevelObj.SetActive(false);
Texture.SetGlobalAnisotropicFilteringLimits(-1, -1);
break;
case 1:
QualitySettings.anisotropicFiltering = AnisotropicFiltering.Enable;
anisoFilteringModeText.text = "Enabled";
anisoLevelObj.SetActive(false);
Texture.SetGlobalAnisotropicFilteringLimits(-1, -1);
break;
case 2:
QualitySettings.anisotropicFiltering = AnisotropicFiltering.ForceEnable;
anisoFilteringModeText.text = "Forced";
Texture.SetGlobalAnisotropicFilteringLimits(CurrentSettings.AnisotropicLevel, CurrentSettings.AnisotropicLevel);
anisoFilteringLevelText.SetText("{0}x", CurrentSettings.AnisotropicLevel);
anisoLevelObj.SetActive(true);
break;
}
}
public void UI_SetAnisotropicLevel(int _anisotropicLevel)
{
if (anisotropicLvlUsed == SettingsUsedState.notUsed || isApplying)
return;
CurrentSettings.AnisotropicLevel = _anisotropicLevel;
Texture.SetGlobalAnisotropicFilteringLimits(CurrentSettings.AnisotropicLevel, CurrentSettings.AnisotropicLevel);
anisoFilteringLevelText.SetText("{0}x", CurrentSettings.AnisotropicLevel);
}
public void UI_ResetToDefault()
{
if (isApplying)
return;
ApplySettings(DefaultSettingsConverted);
}
//called when GraphicsMenu UIPanel is disabled or the menu is closed
public void UI_SaveSettings()
{
if (!initiated || isApplying)
return;
SaveMenuVariables();
}
#endregion
private void LoadMenuVariables()
{
if (saveFormat == SaveFormat.playerprefs)
{
if (PlayerPrefs.HasKey("Qualitylevel"))//to check if there are playerprefs saved.
{
MenuVariablesSimple_URP newMenuVars = new MenuVariablesSimple_URP();
newMenuVars.Qualitylevel = PlayerPrefs.GetInt("Qualitylevel");
newMenuVars.ResolutionX = PlayerPrefs.GetInt("ResolutionX");
newMenuVars.ResolutionY = PlayerPrefs.GetInt("ResolutionY");
newMenuVars.RenderScale = PlayerPrefs.GetFloat("RenderScale");
newMenuVars.WindowedMode = PlayerPrefs.GetInt("WindowedMode");
newMenuVars.VSync = PlayerPrefs.GetInt("VSync");
newMenuVars.AntiAliaslevel = PlayerPrefs.GetInt("AntiAliaslevel");
newMenuVars.TextureQuality = PlayerPrefs.GetInt("TextureQuality");
newMenuVars.AnisotropicMode = PlayerPrefs.GetInt("AnisotropicMode");
newMenuVars.AnisotropicLevel = PlayerPrefs.GetInt("AnisotropicLevel");
ApplySettings(newMenuVars);
newMenuVars = null;
}
else //no player prefs are saved.
{
//use the default values
ApplySettings(DefaultSettingsConverted);
}
}
else if (saveFormat == SaveFormat.iniFile)
{
if (File.Exists(saveFileDataPath))//to check if the file exists.
{
MenuVariablesSimple_URP newMenuVars = JsonUtility.FromJson<MenuVariablesSimple_URP>(File.ReadAllText(saveFileDataPath));
ApplySettings(newMenuVars);
newMenuVars = null;
}
else //no settings were saved.
{
//use the default values
ApplySettings(DefaultSettingsConverted);
}
}
}
private void ApplySettings(MenuVariablesSimple_URP _varsLoaded)
{
isApplying = true;
if (qualityLevelUsed == SettingsUsedState.used)
{
QualitySettings.SetQualityLevel(_varsLoaded.Qualitylevel);
qualityLevelText.text = QualitySettings.names[_varsLoaded.Qualitylevel];
}
if (resolutionUsed == SettingsUsedState.used)
{
if (windowedModeUsed == SettingsUsedState.used)
{
switch (_varsLoaded.WindowedMode)
{
case 0:
Screen.SetResolution(_varsLoaded.ResolutionX, _varsLoaded.ResolutionY, FullScreenMode.ExclusiveFullScreen);
windowedModeText.text = "FullScreen";
break;
case 1:
Screen.SetResolution(_varsLoaded.ResolutionX, _varsLoaded.ResolutionY, FullScreenMode.FullScreenWindow);
windowedModeText.text = "FullScreen Windowed";
break;
case 2:
Screen.SetResolution(_varsLoaded.ResolutionX, _varsLoaded.ResolutionY, FullScreenMode.MaximizedWindow);
windowedModeText.text = "Maximized Windowed";
break;
case 3:
Screen.SetResolution(_varsLoaded.ResolutionX, _varsLoaded.ResolutionY, FullScreenMode.Windowed);
windowedModeText.text = "Windowed";
break;
}
}
else
{
Screen.SetResolution(_varsLoaded.ResolutionX, _varsLoaded.ResolutionY, Screen.fullScreenMode);
}
resolutionText.SetText("{0}x{1}", _varsLoaded.ResolutionX, _varsLoaded.ResolutionY);
//finding the applied resolution index NR
for (int i = 0; i < availableResolutions.Count; i++)
{
if (availableResolutions[i].width == _varsLoaded.ResolutionX && availableResolutions[i].height == _varsLoaded.ResolutionY)
{
currentResolutionIndex = i;
break;
}
}
}
else if (windowedModeUsed == SettingsUsedState.used)
{
switch (_varsLoaded.WindowedMode)
{
case 0:
Screen.fullScreenMode = FullScreenMode.ExclusiveFullScreen;
windowedModeText.text = "FullScreen";
break;
case 1:
Screen.fullScreenMode = FullScreenMode.FullScreenWindow;
windowedModeText.text = "FullScreen Windowed";
break;
case 2:
Screen.fullScreenMode = FullScreenMode.MaximizedWindow;
windowedModeText.text = "Maximized Windowed";
break;
case 3:
Screen.fullScreenMode = FullScreenMode.Windowed;
windowedModeText.text = "Windowed";
break;
}
}
if (antiAliasingUsed == SettingsUsedState.used)
{
UniversalRenderPipelineAsset URPAsset = QualitySettings.GetRenderPipelineAssetAt(QualitySettings.GetQualityLevel()) as UniversalRenderPipelineAsset;
URPAsset.msaaSampleCount = _varsLoaded.AntiAliaslevel;
URPAsset = null;
if (_varsLoaded.AntiAliaslevel != 0)
antiAliasingText.SetText("{0}x", _varsLoaded.AntiAliaslevel);
else antiAliasingText.text = "Off";
}
if (renderScaleUsed == SettingsUsedState.used)
{
UniversalRenderPipelineAsset URPAsset = QualitySettings.GetRenderPipelineAssetAt(QualitySettings.GetQualityLevel()) as UniversalRenderPipelineAsset;
URPAsset.renderScale = _varsLoaded.RenderScale;
URPAsset = null;
renderScaleSlider.value = _varsLoaded.RenderScale * 10;
renderScaleText.text = _varsLoaded.RenderScale.ToString();
}
if (vSyncUsed == SettingsUsedState.used)
{
QualitySettings.vSyncCount = _varsLoaded.VSync;
switch (_varsLoaded.VSync)
{
case 0:
vsyncText.text = "Off";
break;
case 1:
vsyncText.text = "Full";
break;
case 2:
vsyncText.text = "Half";
break;
}
}
if (textureQualityUsed == SettingsUsedState.used)
{
QualitySettings.globalTextureMipmapLimit = _varsLoaded.TextureQuality;
switch (_varsLoaded.TextureQuality)
{
case 0:
textureQualityText.text = "Full";
break;
case 1:
textureQualityText.text = "Half";
break;
case 2:
textureQualityText.text = "Quarte";
break;
case 3:
textureQualityText.text = "Eighth";
break;
}
}
if (anisotropicModeUsed == SettingsUsedState.used)
{
switch (_varsLoaded.AnisotropicMode)
{
case 0:
QualitySettings.anisotropicFiltering = AnisotropicFiltering.Disable;
anisoFilteringModeText.text = "Disabled";
if (anisotropicLvlUsed == SettingsUsedState.used)
{
Texture.SetGlobalAnisotropicFilteringLimits(-1, -1);
anisoLevelObj.SetActive(false);
}
break;
case 1:
QualitySettings.anisotropicFiltering = AnisotropicFiltering.Enable;
anisoFilteringModeText.text = "Enabled";
if (anisotropicLvlUsed == SettingsUsedState.used)
{
Texture.SetGlobalAnisotropicFilteringLimits(-1, -1);
anisoLevelObj.SetActive(false);
}
break;
case 2:
QualitySettings.anisotropicFiltering = AnisotropicFiltering.ForceEnable;
anisoFilteringModeText.text = "Forced";
if (anisotropicLvlUsed == SettingsUsedState.used)
{
Texture.SetGlobalAnisotropicFilteringLimits(_varsLoaded.AnisotropicLevel, _varsLoaded.AnisotropicLevel);
anisoFilteringLevelText.SetText("{0}x", _varsLoaded.AnisotropicLevel);
anisoLevelObj.SetActive(true);
}
break;
}
}
else if (anisotropicLvlUsed == SettingsUsedState.used)
{
Texture.SetGlobalAnisotropicFilteringLimits(_varsLoaded.AnisotropicLevel, _varsLoaded.AnisotropicLevel);
anisoFilteringLevelText.SetText("{0}x", _varsLoaded.AnisotropicLevel);
}
CurrentSettings.Qualitylevel = _varsLoaded.Qualitylevel;
CurrentSettings.ResolutionX = _varsLoaded.ResolutionX;
CurrentSettings.ResolutionY = _varsLoaded.ResolutionY;
CurrentSettings.RenderScale = _varsLoaded.RenderScale;
CurrentSettings.WindowedMode = _varsLoaded.WindowedMode;
CurrentSettings.VSync = _varsLoaded.VSync;
CurrentSettings.AntiAliaslevel = _varsLoaded.AntiAliaslevel;
CurrentSettings.TextureQuality = _varsLoaded.TextureQuality;
CurrentSettings.AnisotropicMode = _varsLoaded.AnisotropicMode;
CurrentSettings.AnisotropicLevel = _varsLoaded.AnisotropicLevel;
isApplying = false;
}
private void SaveMenuVariables()
{
if (saveFormat == SaveFormat.playerprefs)
{
PlayerPrefs.SetInt("Qualitylevel", CurrentSettings.Qualitylevel);
PlayerPrefs.SetInt("ResolutionX", CurrentSettings.ResolutionX);
PlayerPrefs.SetInt("ResolutionY", CurrentSettings.ResolutionY);
PlayerPrefs.SetFloat("RenderScale", CurrentSettings.RenderScale);
PlayerPrefs.SetInt("WindowedMode", CurrentSettings.WindowedMode);
PlayerPrefs.SetInt("VSync", CurrentSettings.VSync);
PlayerPrefs.SetInt("AntiAliaslevel", CurrentSettings.AntiAliaslevel);
PlayerPrefs.SetInt("TextureQuality", CurrentSettings.TextureQuality);
PlayerPrefs.SetInt("AnisotropicMode", CurrentSettings.AnisotropicMode);
PlayerPrefs.SetInt("AnisotropicLevel", CurrentSettings.AnisotropicLevel);
}
else if (saveFormat == SaveFormat.iniFile)
{
#region Setting the correct values for settings the are not used but will show on the ini file .
MenuVariablesSimple_URP menuVarsToSave = new MenuVariablesSimple_URP();
if (qualityLevelUsed == SettingsUsedState.used)
menuVarsToSave.Qualitylevel = CurrentSettings.Qualitylevel;
else menuVarsToSave.Qualitylevel = QualitySettings.GetQualityLevel();
if (resolutionUsed == SettingsUsedState.used)
{
menuVarsToSave.ResolutionX = CurrentSettings.ResolutionX;
menuVarsToSave.ResolutionY = CurrentSettings.ResolutionY;
}
else
{
menuVarsToSave.ResolutionX = Screen.currentResolution.width;
menuVarsToSave.ResolutionY = Screen.currentResolution.height;
}
if (renderScaleUsed == SettingsUsedState.used)
menuVarsToSave.RenderScale = CurrentSettings.RenderScale;
else
{
UniversalRenderPipelineAsset URPAsset = QualitySettings.GetRenderPipelineAssetAt(QualitySettings.GetQualityLevel()) as UniversalRenderPipelineAsset;
menuVarsToSave.RenderScale = URPAsset.renderScale;
URPAsset = null;
}
if (windowedModeUsed == SettingsUsedState.used)
menuVarsToSave.WindowedMode = CurrentSettings.WindowedMode;
else
{
switch (Screen.fullScreenMode)
{
case FullScreenMode.ExclusiveFullScreen:
menuVarsToSave.WindowedMode = 0;
break;
case FullScreenMode.FullScreenWindow:
menuVarsToSave.WindowedMode = 1;
break;
case FullScreenMode.MaximizedWindow:
menuVarsToSave.WindowedMode = 2;
break;
case FullScreenMode.Windowed:
menuVarsToSave.WindowedMode = 3;
break;
}
}
if (vSyncUsed == SettingsUsedState.used)
menuVarsToSave.VSync = CurrentSettings.VSync;
else menuVarsToSave.VSync = QualitySettings.vSyncCount;
if (antiAliasingUsed == SettingsUsedState.used)
menuVarsToSave.AntiAliaslevel = CurrentSettings.AntiAliaslevel;
else
{
UniversalRenderPipelineAsset URPAsset = QualitySettings.GetRenderPipelineAssetAt(QualitySettings.GetQualityLevel()) as UniversalRenderPipelineAsset;
menuVarsToSave.AntiAliaslevel = URPAsset.msaaSampleCount;
URPAsset = null;
}
if (textureQualityUsed == SettingsUsedState.used)
menuVarsToSave.TextureQuality = CurrentSettings.TextureQuality;
else menuVarsToSave.TextureQuality = QualitySettings.globalTextureMipmapLimit;
if (anisotropicModeUsed == SettingsUsedState.used)
menuVarsToSave.AnisotropicMode = CurrentSettings.AnisotropicMode;
else
{
switch (QualitySettings.anisotropicFiltering)
{
case AnisotropicFiltering.Disable:
menuVarsToSave.AnisotropicMode = 0;
break;
case AnisotropicFiltering.Enable:
menuVarsToSave.AnisotropicMode = 1;
break;
case AnisotropicFiltering.ForceEnable:
menuVarsToSave.AnisotropicMode = 2;
break;
}
}
if (anisotropicLvlUsed == SettingsUsedState.used)
menuVarsToSave.AnisotropicLevel = CurrentSettings.AnisotropicLevel;
else menuVarsToSave.AnisotropicLevel = -1;//default used
menuVarsToSave.Warning = DefaultSettingsConverted.Warning;
#endregion
File.WriteAllText(saveFileDataPath, JsonUtility.ToJson(menuVarsToSave, true));
}
}
}
//custom classes
//easier to read and adjust in the inspector
[System.Serializable]
public class MenuVariables_URP
{
public int Qualitylevel = 1;
[Header("Setting one or both to Zero, will use the monitors/windows resolution.")]
public Vector2Int Resolution = new Vector2Int(0, 0);
[Range(0.1f, 2f)]
public float RenderScale = 1f;
public FullScreenMode WindowedMode = FullScreenMode.MaximizedWindow;
public VSyncEnum VSync = VSyncEnum.off;
public AntiAliasLevelEnum AntiAliaslevel = 0;
public TextureQualityEnum TextureQuality = TextureQualityEnum.FullRes;
public AnisotropicFiltering AnisotropicMode = AnisotropicFiltering.Enable;
[Header("Used when Anisotropic Mode = forced Enabled")]
public AnisotropicLevelEnum AnisotropicLevel = AnisotropicLevelEnum.x4;
[Header("A Warning for users changing the ini file.")]
public string WarningMessage = "Edit this file at your own risk!";
}
//easier to use in script
[System.Serializable]
public class MenuVariablesSimple_URP
{
public int Qualitylevel;
public int ResolutionX, ResolutionY;
public float RenderScale;
public int WindowedMode;
public int VSync;
public int AntiAliaslevel;
public int TextureQuality;
public int AnisotropicMode;
public int AnisotropicLevel;
public string Warning;
}
public enum SettingsUsedState { used, notUsed };
public enum VSyncEnum { off, full, half };
public enum AntiAliasLevelEnum { off, x2, x4, x8 };
public enum TextureQualityEnum { FullRes, HalfRes, QuarterRes, EighthRes };
public enum AnisotropicLevelEnum { x2, x4, x8, x16 };
}