You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 07:15:04