unity webgl 全屏再缩小会比设置的分辨率要低是为什么

img

img

第一张是没有全屏前正常的分辨率,第二张是全屏再缩小之后,明显窗口小了好几号。问题跟浏览器应该无关,同一个浏览器我试了一下别的项目,是正常的,playerSetting里除了项目名字其他的设置的跟这个项目一模一样。

F12之后提示:Performance Warning: Recreating Offscreen FBO(1364x768=>960x540)

找到原因了,是一个在unity中嵌入网页的插件Vuplex影响的。

unity webgl在全屏和窗口模式切换时,会重新计算canvas的大小,这会导致渲染分辨率发生改变。
具体来说:

  1. unity默认会根据浏览器窗口大小,计算出一个合适的canvas分辨率。这个计算过程会考虑屏幕分辨率、性能等因素,以尽可能高的分辨率运行游戏。
  2. 当进入全屏模式后,浏览器窗口变大,unity会重新计算canvas大小,提供更高的渲染分辨率。
  3. 退出全屏后,浏览器窗口变小,unity又会重新计算一次canvas大小,这时分辨率会比第1步低,因为窗口变小了。
  4. 最后渲染到的屏幕分辨率,需要综合canvas分辨率和浏览器窗口大小来计算,所以窗口变小时,感觉分辨率降低是正常的。
    你可以在unity项目的Player Settings中,设置默认的canvas分辨率,保证全屏和窗口模式使用相同的分辨率,就不会出现明显的分辨率变化了。
    另外,性能警告也提示WebGL需要重新分配一个较小的缓冲区,这也会对性能产生一定影响,优化Canvas分辨率可以提升性能。
    总之,这个问题主要是unity自动优化渲染分辨率引起的,可以通过合理设置canvas大小来解决。保持全屏和窗口模式使用相同分辨率可以避免明显的分辨率变化。