Unity如何通过脚本修改URP资源的Render Scale属性
URP动态修改Render Scale解决方案
方案1:直接通过代码动态修改当前URP管线的Render Scale(无需创建多份URP资源)
该方案为最优解,无需维护多份管线资源,运行时可实时修改参数,适配Unity 2020.3及以上所有URP版本。
- 全局Render Scale修改方法(所有相机生效)
using UnityEngine.Rendering; using UnityEngine.Rendering.Universal; public void SetGlobalRenderScale(float newScale) { // 校验当前渲染管线是否为URP if (GraphicsSettings.currentRenderPipeline is not UniversalRenderPipelineAsset urpAsset) return; // 直接修改管线资产的renderScale属性,合法范围一般为0.1~2 urpAsset.renderScale = Mathf.Clamp(newScale, 0.1f, 2f); }
- 单相机独立Render Scale修改方法(仅指定相机生效,优先级高于全局设置)
public void SetCameraRenderScale(Camera targetCamera, float newScale) { if (targetCamera.TryGetComponent(out UniversalAdditionalCameraData camData)) { camData.renderScale = Mathf.Clamp(newScale, 0.1f, 2f); } }
- 注意事项:
- 编辑器模式下修改全局Render Scale会直接改变URP资产的本地原值,打包后修改只会影响运行时内存中的实例,不会修改本地资源文件
- 单相机Render Scale设置不会影响全局管线参数,适合需要多相机分层设置渲染分辨率的场景
方案2:多URP资源切换实现(备用方案)
如果需要同时保存多套完整的管线参数配置,可以使用该方案
- 提前在项目中创建多份不同Render Scale配置的
UniversalRenderPipelineAsset资源,存放在项目指定目录 - 运行时切换代码如下:
// 预先把多份URP资产拖入这个数组引用 public UniversalRenderPipelineAsset[] urpAssetConfigs; public void SwitchURPConfig(int configIndex) { if (configIndex < 0 || configIndex >= urpAssetConfigs.Length) return; // 替换全局激活的管线资产 GraphicsSettings.currentRenderPipeline = urpAssetConfigs[configIndex]; }
- 注意事项:
- 切换管线会触发一次全局渲染资源重置,开销比直接改属性高,适合不频繁切换的场景
- 不同URP资产除了Render Scale之外的其他参数也会同步切换,需要提前做好参数对齐
内容的提问来源于stack exchange,提问作者daniel
相关产品推荐
相关产品推荐

