Unity URP切换品质和Feature开关的性能问题

现在对我的项目进行安卓端发布,需要切换品质和一些Feature开关。
我是这样做的。

划分品质

在这里插入图片描述
首先Renerer分为2个Android和PC,图中其他不用参考。
每个副本的URP Asset分为pc和android,例如图中的
hall和hall_android。
hall

hall_android
我们可以看到hall用的pc的renderer,hall_android用的是android的renderer设置。

进入副本切换

    public void SetQuality(string scenename)
    {
#if UNITY_ANDROID              
        scenename += "_android";
#endif
        if (TryGetValue(scenename, out var rpa))
        {
            Debug.Log("切换品质:" + scenename);
            QualitySettings.renderPipeline = (RenderPipelineAsset)rpa;

            ScriptableRenderer sr = CameraManager.inst.cameraData.scriptableRenderer;//
            var property = typeof(ScriptableRenderer).GetProperty("rendererFeatures", BindingFlags.NonPublic | BindingFlags.Instance);

            List<ScriptableRendererFeature> features = property.GetValue(sr) as List<ScriptableRendererFeature>;
            for (int i = 0; i < features.Count; i++)
            {
                Debug.Log("features :" + features[i].name + " , active :" + features[i].isActive);
            }
        }
        else
        {
            Debug.LogError("没找到这个品质:" + scenename);
        }
    }

TryGetValue是从所有的URPAsset里获取对应的设置,然后通过QualitySettings.renderPipeline函数覆盖设置。
后面是输出所有的features名字和开关。

开启和关闭Feature

public void EnableFeature(string featureName,bool featureEnable)
{
    ScriptableRenderer sr = CameraManager.inst.cameraData.scriptableRenderer;//
    var property = typeof(ScriptableRenderer).GetProperty("rendererFeatures", BindingFlags.NonPublic | BindingFlags.Instance);

    List<ScriptableRendererFeature> features = property.GetValue(sr) as List<ScriptableRendererFeature>;
    for (int i = 0; i < features.Count; i++)
    {
        if (features[i].name == featureName)
        {
            features[i].SetActive(featureEnable);
            Debug.Log("features change :" + features[i].name + " , active :" + features[i].isActive);
        }
    }
}

这个接口用于开关某些feature。

特别重要的性能问题

这里要注意,因为每个副本的renderer是共用的,所以feature需要根据每个副本不同来开启关闭比较灵活。

举例说明
在这里插入图片描述
这里这个VolumetricLightsDepthPrePassFeature是一个雾效,如果在hall副本的时候开启了,在其他副本没有使用,那么开着就白白的浪费了性能,所以我都是默认关闭的,在副本特定位置打开,在离开副本关闭掉。

那就到这里了。

如果对你有用,请点赞。

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Thinbug

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值