在之前一种优化方式是改变 :屏幕分辨率 https://docs.unity3d.com/2017.3/Documentation/ScriptReference/Screen-resolutions.html
在 Unity 2017.3 中增加了API :
https://docs.unity3d.com/2017.3/Documentation/ScriptReference/Camera-allowDynamicResolution.html
https://docs.unity3d.com/Manual/DynamicResolution.html
Camera的动态分辨率设置,该设置允许您动态缩放单个渲染目标,以减少GPU上的工作负载。在app的帧速率降低的情况下,您可以逐渐缩小分辨率以保持一致的帧率。如果性能数据表明由于app受GPU限制,帧率将会下降,Unity会触发此缩放。您还可以通过脚本控制缩放来手动触发缩放。
![](https://img-blog.csdnimg.cn/20190310115855515.png)
上图的勾选设置 , 是为渲染目标添加一个标记 :DynamicallyScalable https://docs.unity3d.com/ScriptReference/RenderTextureCreationFlags.DynamicallyScalable.html ,
相机还具有 相机还具有allowDynamicResolution标志 ,您可以使用该标志来设置动态分辨率。
代码更改 分辨率:
//分辨率更改
ScalableBufferManager.ResizeBuffers(0.5f,0.5f);
//更新RenderTexture
Graphics.Blit(_tex,_renderTexture);
https://docs.unity3d.com/ScriptReference/ScalableBufferManager.html
![f:id:esakun:20181217173031g:平原](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4tYWsuZi5zdC1oYXRlbmEuY29tL2ltYWdlcy9mb3RvbGlmZS9lL2VzYWt1bi8yMDE4MTIxNy8yMDE4MTIxNzE3MzAzMS5naWY)
ScalableBufferManager.ResizeBuffers
更改分辨率后,useDynamicScale
将清除渲染纹理内容,因此必须完成渲染纹理更新。Unity FrameTimingManager允许您检测CPU或GPU性能何时开始下降。因此,您可以使用FrameTimingManager
计算新的所需宽度和高度比例来将帧速率保持在所需范围内,并将比例降低到该值以保持性能稳定