fix(game-loop): 修复分辨率切换后视口未正确更新问题

This commit is contained in:
2026-04-15 22:23:01 +08:00
parent ed3a394049
commit 5ce289a687
+27 -7
View File
@@ -195,23 +195,43 @@ namespace AibisDream
public void SetScreenMode(string windowMode) public void SetScreenMode(string windowMode)
{ {
int targetWidth, targetHeight;
switch (windowMode) switch (windowMode)
{ {
case "FullScreen": case "FullScreen":
Screen.SetResolution(Screen.currentResolution.width, Screen.currentResolution.height, targetWidth = Screen.currentResolution.width;
FullScreenMode.FullScreenWindow); targetHeight = Screen.currentResolution.height;
Screen.SetResolution(targetWidth, targetHeight, FullScreenMode.FullScreenWindow);
break; break;
case "Windowed": case "Windowed":
Screen.SetResolution(1920, 1080, FullScreenMode.Windowed); targetWidth = 1920;
targetHeight = 1080;
Screen.SetResolution(targetWidth, targetHeight, FullScreenMode.Windowed);
break; break;
case "MaximizedWindow": case "MaximizedWindow":
Screen.SetResolution(Screen.currentResolution.width, Screen.currentResolution.height, targetWidth = Screen.currentResolution.width;
FullScreenMode.MaximizedWindow); targetHeight = Screen.currentResolution.height;
Screen.SetResolution(targetWidth, targetHeight, FullScreenMode.MaximizedWindow);
break; break;
default:
return;
} }
ActionKit.DelayFrame(1, () => CameraKit.Instance.UpdateCameraViewport(windowMode == "Windowed")) StartCoroutine(WaitForResolutionAndUpdateViewport(
.StartGlobal(); targetWidth, targetHeight, windowMode == "Windowed"));
}
private IEnumerator WaitForResolutionAndUpdateViewport(
int targetWidth, int targetHeight, bool reset)
{
float timeout = Time.unscaledTime + 1f;
while ((Screen.width != targetWidth || Screen.height != targetHeight)
&& Time.unscaledTime < timeout)
{
yield return null;
}
CameraKit.Instance.UpdateCameraViewport(reset);
} }
#endregion #endregion