提要
以下内容都是基于 QualitySetting 中的Rendering资源为null的前提下,应该是由于只动态修改了Graphics.Scriptable Render Pipeline Setting资源,而 QualitySetting.Rendering会覆盖效果
经真机测试后未发现异常问题
实现方式
准备多个URPAsset管线资源:
public RenderPipelineAsset URPAsset;
private RenderPipelineAsset m_OriUrpAsset;
void Modify()
{
m_OriUrpAsset = GraphicsSettings.renderPipelineAsset;
GraphicsSettings.renderPipelineAsset = URPAsset;
}
void Reset()
{
GraphicsSettings.renderPipelineAsset = m_OriUrpAsset;
m_OriUrpAsset = null;
}
该资源同样是可以打入AB包动态加载的,类型为UnityEngine.Rendering.RenderPipelineAsset
注意点
当更换了URPAsset后,如果RendererList的数据不相同,则可能报错索引找不到,因为该列表中的RendererData是被Camera引用的 (另外补充提示一点,Cemara的Rendering.Renderer引用的是当前GraphicsSetting.Scriptable Render Pipeline Setting的URPAsset里的RendererData资源数据)
URPAsset.Shadow参数动态修改方式
var asset = GraphicsSettings.renderPipelineAsset as UniversalRenderPipelineAsset;
asset.shadowDistance = m_shadowDistance;
asset.shadowCascadeCount = m_shadowCascadeCount;
asset.shadowDepthBias = m_shadowDepthBias;
asset.shadowNormalBias = m_shadowNormalBias;