Screen.SetResolution() 执行失效

来源:互联网 发布:春秋干将莫邪 知乎 编辑:程序博客网 时间:2024/06/06 07:43

有很多朋友们都会使用Screen.SetResolution() 来控制屏幕分辨率,例如游戏全屏化什么的。

static function SetResolution (width : int, height : int, fullscreen : bool, preferredRefreshRate : int = 0) : void

①这个方法的自变量分别为 宽度、高度、是否全屏、屏幕刷新率 ,如果你的显示器中不包含自变量输入的分辨率,那么系统会自动匹配最相近的分辨率执行。
但这不是重点,重点是:
②系统检测到该语句后,是在当前帧完成之后执行的!
也就是说该语句的位置很重要。


Unity API对于这句话的翻译是:

全屏开关不会立即发生,它实际发生是在当前帧完成时。

但是在https://docs.unity3d.com/ScriptReference/Screen.SetResolution.html 中的英文原文却是:

A resolution switch does not happen immediately; it will actually happen when the current frame is finished.


所以,我们概念中的全屏开关和 Resolution Switch 概念还是有差别,在此轻吐槽一下。


所以,建议大家像我一样,先设置一个保留触发,等到 LateUpdate 里再进行分辨率调整

private bool turnResolution=false;public void f_Btn(){turnResolution=true;}void LateUpdate(){if(turnResolution){Screen.SetResolution(1920,1080,true);turnResolution=false;}  }





原创粉丝点击