using System.Collections.Generic; using UnityEngine; public class GraphicsSettings : MonoBehaviour { private static Resolution[] _resolutions; public static Resolution[] RESOLUTIONS { get { if ( _resolutions != null ) { return _resolutions; } var resList = new List(); Resolution last = new Resolution(); foreach (var res in Screen.resolutions) { if ( res.height != last.height || res.height != last.height ) { resList.Add(res); last = res; } } _resolutions = resList.ToArray(); return _resolutions; } } private Resolution _currentResolution; private FullScreenMode _fullscreenMode; [SerializeField] private PlayerPrefValue _resolutionPlayerPref; [SerializeField] private PlayerPrefValue _fullscreenPlayerPref; private const FullScreenMode FULLSCREEN = FullScreenMode.FullScreenWindow; private const FullScreenMode WINDOWED = FullScreenMode.Windowed; private void Awake() { _currentResolution = RESOLUTIONS[ _resolutionPlayerPref.GetInt( RESOLUTIONS.Length - 1 ) ]; _fullscreenMode = ( _fullscreenPlayerPref.GetInt( 1 ) > 0 ) ? FULLSCREEN : WINDOWED; UpdateGraphics(); _resolutionPlayerPref.OnIntSet.AddListener(SetResolution); _fullscreenPlayerPref.OnIntSet.AddListener( ( value ) => { SetFullscreen( value > 0 ); } ); } private void SetResolution( int value ) { _currentResolution = RESOLUTIONS[ value ]; UpdateGraphics(); } private void SetFullscreen( bool value ) { _fullscreenMode = value ? FULLSCREEN : WINDOWED; UpdateGraphics(); } private void UpdateGraphics() { Screen.SetResolution( _currentResolution.width, _currentResolution.height, _fullscreenMode ); } }