Ian*_* H. 1 c# unity-game-engine
我希望我的游戏具有 1:1 的纵横比,但可以放大到一定的比例。这意味着宽度和高度必须相同,但不能大于实际屏幕尺寸。最重要的是,为了确保一致的像素大小,宽度和高度值必须是 2 的幂值。
我在找出所需的价值方面没有任何问题。
int value = 2;
int limit = Screen.currentResolution.height;
while (value * 2 < limit) value *= 2;
Debug.Log(value);
Run Code Online (Sandbox Code Playgroud)
我更不知道如何在显示初始图像之前设置窗口大小。有没有办法做到这一点?
是的,有,但这意味着您需要摆脱启动窗口。
原因是,如果您启用启动窗口(您可以从中选择分辨率、质量、窗口化或全屏模式等),Unity 将仅显示显卡可用的分辨率——这意味着没有 1:1 的纵横比分辨率可用.
因此,为了做到这一点,您需要按如下方式设置播放器设置:
重要的部分是禁用Display Resolution Dialog. 然后您通过禁用 来设置Default Screen Width和。HeightDefault Is Native Resolution
请注意,独立将在开始时强制使用此分辨率,并且仅此分辨率 - 在启动屏幕之后,您可以通过Screen.SetResolution从加载的第一个场景中的任何脚本调用该方法来设置您想要的任何分辨率。当然,您可以通过取消勾选/勾选该Default Is Full Screen选项,以窗口或全屏模式独立启动。
差不多就是这样,如果您想让用户可以从 1:1 AR 分辨率列表中进行选择,那么您现在根本无法做到这一点。
编辑:播放器设置的分辨率信息存储在注册表里面HKEY_CURRENT_USER\Software\[YourCompanyName]\[YourGameName]。这三个键是:
Screenmanager Is Fullscreen mode
Screenmanager Resolution Height
Screenmanager Resolution Width
Run Code Online (Sandbox Code Playgroud)
要在运行时从游戏内部更改这些,您需要使用:
PlayerPrefs.SetInt("Screenmanager Is Fullscreen mode", [0/1]);
PlayerPrefs.SetInt("Screenmanager Resolution Height", [HeighthRes]);
PlayerPrefs.SetInt("Screenmanager Resolution Width", [WidthRes]);
Run Code Online (Sandbox Code Playgroud)
这些将在下次启动游戏时读取,在启动画面之前设置起始分辨率。