接到一个不太合理的需求,在某个页面需要临时关一直URP的设置

研究了下,有以下几种实现方式

1.通过反射实现

  List<ScriptableRendererFeature> srfList;

  ScriptableRendererFeature outline;

 

  UniversalRenderPipelineAsset _pipelineAssetCurrent = GraphicsSettings.currentRenderPipeline as UniversalRenderPipelineAsset;  // 通过GraphicsSettings获取当前的配置

  _pipelineAssetCurrent = QualitySettings.renderPipeline as UniversalRenderPipelineAsset;  // 通过QualitySettings获取当前的配置

  _pipelineAssetCurrent = QualitySettings.GetRenderPipelineAssetAt(QualitySettings.GetQualityLevel()) as UniversalRenderPipelineAsset;  // 通过QualitySettings获取不同等级的配置

  // 也可以通过QualitySettings.names遍历所有配置

  srfList = _pipelineAssetCurrent.scriptableRenderer.GetType().GetProperty("rendererFeatures", BindingFlags.NonPublic | BindingFlags.Instance)?.GetValue(_pipelineAssetCurrent.scriptableRenderer, null) as List<ScriptableRendererFeature>;

  for(int i = 0; i < srfList.Count; i++)
  {
    if (srfList[i].name == "PlayerOutline")
      {
        outline = srfList[i];
        outline.SetActive(false);
        break;
      }

  }

2.通过ForwardRendererData类实现

  public ForwardRendererData rendererData; // 需要把配置文件拖到属性面板上

  ScriptableRendererFeature outline;

 

  for(int i = 0; i < rendererData.rendererFeatures.Count; i++)
  {
    if (rendererData.rendererFeatures[i].name == "PlayerOutline")
      {
        outline = rendererData.rendererFeatures[i];
        outline.SetActive(false);
        break;
      }

  }