diff --git a/Assets/AWSIM/Scripts/UI/GraphicsSettings.cs b/Assets/AWSIM/Scripts/UI/GraphicsSettings.cs index 087e054a30..91a1512ac0 100644 --- a/Assets/AWSIM/Scripts/UI/GraphicsSettings.cs +++ b/Assets/AWSIM/Scripts/UI/GraphicsSettings.cs @@ -12,10 +12,18 @@ public class GraphicsSettings : MonoBehaviour private List _cameraObjectsList; private Light _sunSource; - private int _gpuMemorySize; private int _initialQualityLevel; private int _currentQualityLevel; - private bool _isInitialised; + + /// + /// PlayerPref key for graphics quality settings: + /// Not set = -1, + /// Low = 0, + /// Medium = 1, + /// High = 2, + /// Ultra = 3, + /// + private const string UserGraphicsQualityKey = "UserGraphicsQuality"; private readonly List _dropdownOptions = new() { @@ -27,12 +35,13 @@ public class GraphicsSettings : MonoBehaviour private void Awake() { - _gpuMemorySize = SystemInfo.graphicsMemorySize; + // Initialize PlayerPref Keys + PlayerPrefs.SetInt(UserGraphicsQualityKey, -1); } private void Start() { - // add main camera to list (BEV cam is not initialized yet will be added later) + // add main camera to list (BEV cam is not initialized yet, will be when enabled) _cameraObjectsList = new List { Camera.main?.gameObject, @@ -43,7 +52,17 @@ private void Start() BirdEyeView.OnCameraInitialized += UpdateGraphicSettingsForAddedCamera; // Set initial quality level - InitialQualityLevel(); + if (PlayerPrefs.HasKey(UserGraphicsQualityKey) && + PlayerPrefs.GetInt(UserGraphicsQualityKey) != -1) + { + _initialQualityLevel = PlayerPrefs.GetInt(UserGraphicsQualityKey); + UISetQuality(_initialQualityLevel); + } + else + { + // Get GPU memory size + InitialQualityLevel(SystemInfo.graphicsMemorySize); + } // Populate dropdown with quality settings _dropdown = GetComponent(); @@ -64,36 +83,31 @@ public void Activate() Start(); } - private void InitialQualityLevel() + private void InitialQualityLevel(int gpuMemorySize) { - if (!_isInitialised) + // Select Quality settings level (URP Asset) based on the size of the device's graphics memory + switch (gpuMemorySize) { - // Select Quality settings level (URP Asset) based on the size of the device's graphics memory - switch (_gpuMemorySize) - { - case <= 2048: - _initialQualityLevel = 0; - GraphicsLowQuality(); - break; - case <= 4096: - _initialQualityLevel = 1; - GraphicsMediumQuality(); - break; - case <= 6144: - _initialQualityLevel = 2; - GraphicsHighQuality(); - break; - case <= 8192: - _initialQualityLevel = 3; - GraphicsUltraQuality(); - break; - default: - _initialQualityLevel = 3; - GraphicsUltraQuality(); - break; - } - - _isInitialised = true; + case <= 2048: + _initialQualityLevel = 0; + GraphicsLowQuality(); + break; + case <= 4096: + _initialQualityLevel = 1; + GraphicsMediumQuality(); + break; + case <= 6144: + _initialQualityLevel = 2; + GraphicsHighQuality(); + break; + case <= 8192: + _initialQualityLevel = 3; + GraphicsUltraQuality(); + break; + default: + _initialQualityLevel = 3; + GraphicsUltraQuality(); + break; } } @@ -118,8 +132,10 @@ public void UISetQuality(int value) private void GraphicsLowQuality() { + // Update quality level _currentQualityLevel = 0; QualitySettings.SetQualityLevel(0); + PlayerPrefs.SetInt(UserGraphicsQualityKey, 0); // update camera parameters foreach (var cam in _cameraObjectsList) @@ -151,6 +167,7 @@ private void GraphicsMediumQuality() { _currentQualityLevel = 1; QualitySettings.SetQualityLevel(1); + PlayerPrefs.SetInt(UserGraphicsQualityKey, 1); // update camera and volume parameters foreach (var cam in _cameraObjectsList) @@ -184,6 +201,7 @@ private void GraphicsHighQuality() { _currentQualityLevel = 2; QualitySettings.SetQualityLevel(2); + PlayerPrefs.SetInt(UserGraphicsQualityKey, 2); // update camera parameters foreach (var cam in _cameraObjectsList) @@ -220,6 +238,7 @@ private void GraphicsUltraQuality() { _currentQualityLevel = 3; QualitySettings.SetQualityLevel(3); + PlayerPrefs.SetInt(UserGraphicsQualityKey, 3); // update camera parameters foreach (var cam in _cameraObjectsList)