This commit is contained in:
2026-08-05 14:18:41 +08:00
parent cbec8d6306
commit 8128e8fc77
5 changed files with 49 additions and 12 deletions
@@ -78,7 +78,7 @@ public class UIHome_BY_SettingPanel : SubUIBase
CacheToggleColor(toggle_Fps30);
CacheToggleColor(toggle_Fps45);
CacheToggleColor(toggle_Fps60);
int fps = PlayerPrefs.GetInt("TargetFps", 2);
int fps = PlayerPrefs.GetInt("TargetFps", 1);
ApplyFps(fps);
toggle_Fps30?.onValueChanged.AddListener(a => { if (a) SetFps(0); });
toggle_Fps45?.onValueChanged.AddListener(a => { if (a) SetFps(1); });
@@ -120,7 +120,11 @@ public class UIHome_BY_SettingPanel : SubUIBase
UpdateToggleColor(toggle_QualityLow, level == 0);
UpdateToggleColor(toggle_QualityMid, level == 1);
UpdateToggleColor(toggle_QualityHigh, level == 2);
QualitySettings.SetQualityLevel(level, true);
// 关键:applyExpensiveChanges 必须为 false。
// URP 下每个画质档位绑定不同 URP Asset,SetQualityLevel(true) 会立即重建渲染管线/重编译 shader,
// 瞬间 GPU 负载骤增,在低端显卡/驱动不兼容时触发设备重置导致闪退。
// false 表示昂贵更改延迟到安全时机(下一帧)应用,避免闪退。
QualitySettings.SetQualityLevel(level, false);
}
private void SetFps(int level)
@@ -138,13 +142,12 @@ public class UIHome_BY_SettingPanel : SubUIBase
UpdateToggleColor(toggle_Fps30, level == 0);
UpdateToggleColor(toggle_Fps45, level == 1);
UpdateToggleColor(toggle_Fps60, level == 2);
// 关键:vSyncCount != 0 会让 Application.targetFrameRate 失效(被屏幕刷新率覆盖)。
// Balanced/High Fidelity 画质默认 vSyncCount=1,必须强制关闭才能让帧率档位生效。
QualitySettings.vSyncCount = 0;
// 中高档统一为 60 帧。移动端强制垂直同步,45 不可用(60Hz 整数倍才合法),
// 故中档(45)也直接按 60 处理,避免闪退。
switch (level)
{
case 0: Application.targetFrameRate = 30; break;
case 1: Application.targetFrameRate = 45; break;
case 1:
case 2: Application.targetFrameRate = 60; break;
}
}