65 lines
2.3 KiB
C#
65 lines
2.3 KiB
C#
using UnityEngine;
|
|
|
|
namespace NBF.Setting
|
|
{
|
|
/// <summary>
|
|
/// 分辨率设置
|
|
/// </summary>
|
|
[Sort(2)]
|
|
public class ResolutionSetting : MultiOption<Resolution>
|
|
{
|
|
private Resolution _defaultResolution;
|
|
public override string Name => "Resolution";
|
|
public override string Group => SettingsDef.Group.Graphic;
|
|
protected override Resolution DefaultValue => _defaultResolution;
|
|
|
|
protected override void OnInitialize()
|
|
{
|
|
_defaultResolution = Screen.currentResolution;
|
|
var supportedResolutions = Screen.resolutions;
|
|
|
|
foreach (var resolution in supportedResolutions)
|
|
{
|
|
if (resolution.width < 720 || resolution.height < 720) continue;
|
|
AddOption($"{resolution.width}x{resolution.height}", resolution);
|
|
}
|
|
|
|
SelectOption(r => AreEqual(r, Screen.currentResolution), defaultIndex: 0);
|
|
}
|
|
|
|
protected override void OnApply()
|
|
{
|
|
var resolution = GetSelectedOption();
|
|
|
|
switch (Screen.fullScreenMode)
|
|
{
|
|
case FullScreenMode.ExclusiveFullScreen:
|
|
Screen.SetResolution(Screen.width, Screen.width, FullScreenMode.ExclusiveFullScreen);
|
|
break;
|
|
case FullScreenMode.FullScreenWindow:
|
|
Screen.SetResolution(resolution.width, resolution.height, FullScreenMode.FullScreenWindow);
|
|
break;
|
|
case FullScreenMode.MaximizedWindow:
|
|
Screen.SetResolution(resolution.width, resolution.height, FullScreenMode.MaximizedWindow);
|
|
break;
|
|
case FullScreenMode.Windowed:
|
|
Screen.SetResolution(resolution.width, resolution.height, FullScreenMode.Windowed);
|
|
break;
|
|
default:
|
|
Screen.SetResolution(Screen.width, Screen.width, FullScreenMode.ExclusiveFullScreen);
|
|
break;
|
|
}
|
|
}
|
|
|
|
protected override void OnReset()
|
|
{
|
|
SelectOption(r => AreEqual(r, Screen.currentResolution), defaultIndex: 0);
|
|
}
|
|
|
|
|
|
bool AreEqual(Resolution a, Resolution b)
|
|
{
|
|
return a.width == b.width && a.height == b.height;
|
|
}
|
|
}
|
|
} |