using System; using System.Collections.Generic; #if UNITY_EDITOR using UnityEditor; #endif namespace UnityEngine.Rendering { /// <summary> /// Contains a double list of <see cref="IRenderPipelineGraphicsSettings"/> one is used for editor /// and the other for standalone release, the standalone release will be stripped by <see cref="IRenderPipelineGraphicsSettingsStripper{T}"/> /// </summary> [Serializable] public class RenderPipelineGraphicsSettingsContainer : ISerializationCallbackReceiver { #if UNITY_EDITOR [SerializeField] private RenderPipelineGraphicsSettingsCollection m_SettingsList = new(); #endif [SerializeField, HideInInspector] private RenderPipelineGraphicsSettingsCollection m_RuntimeSettings = new(); /// <summary> /// Returns one list for editor and another for runtime /// </summary> public List<IRenderPipelineGraphicsSettings> settingsList { #if UNITY_EDITOR get => m_SettingsList.settingsList; #else get => m_RuntimeSettings.settingsList; #endif } /// <summary> /// On Before Serialize callback where the stripping is performed /// </summary> public void OnBeforeSerialize() { #if UNITY_EDITOR m_RuntimeSettings.settingsList.Clear(); if (BuildPipeline.isBuildingPlayer) // Same behaviour as transfer.IsSerializingForGameRelease RenderPipelineGraphicsSettingsStripper.PerformStripping(m_SettingsList.settingsList, m_RuntimeSettings.settingsList); #endif } /// <summary> /// On After Deserialize callback, nothing is implemented /// </summary> public void OnAfterDeserialize() { #if UNITY_EDITOR m_RuntimeSettings.settingsList.Clear(); #endif } } }