接到一个不太合理的需求,在某个页面需要临时关一直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;
}
}
浙公网安备 33010602011771号