江苏建设工程信息网站,西安企业建站价格,美篇相册制作免费下载,网页设计与制作的实训报告现在对我的项目进行安卓端发布#xff0c;需要切换品质和一些Feature开关。 我是这样做的。
划分品质 首先Renerer分为2个Android和PC#xff0c;图中其他不用参考。 每个副本的URP Asset分为pc和android#xff0c;例如图中的 hall和hall_android。 我们可以看到hall用的…现在对我的项目进行安卓端发布需要切换品质和一些Feature开关。 我是这样做的。
划分品质 首先Renerer分为2个Android和PC图中其他不用参考。 每个副本的URP Asset分为pc和android例如图中的 hall和hall_android。 我们可以看到hall用的pc的rendererhall_android用的是android的renderer设置。
进入副本切换 public void SetQuality(string scenename){
#if UNITY_ANDROID scenename _android;
#endifif (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);ListScriptableRendererFeature features property.GetValue(sr) as ListScriptableRendererFeature;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);ListScriptableRendererFeature features property.GetValue(sr) as ListScriptableRendererFeature;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副本的时候开启了在其他副本没有使用那么开着就白白的浪费了性能所以我都是默认关闭的在副本特定位置打开在离开副本关闭掉。
那就到这里了。
如果对你有用请点赞。
参考