namespace UnityEngine.AdaptivePerformance { /// /// A scaler used by for adjusting build-in fog. /// public class AdaptiveFog : AdaptivePerformanceScaler { AdaptivePerformanceScalerSettingsBase m_AdaptiveFog = new AdaptivePerformanceScalerSettingsBase { name = "Adaptive Fog", enabled = false, scale = 1.0f, visualImpact = ScalerVisualImpact.Medium, target = ScalerTarget.GPU, minBound = 0, maxBound = 1, maxLevel = 10 }; /// /// A scaler setting used by to adjust the application update rate using . /// public AdaptivePerformanceScalerSettingsBase AdaptiveFogSetting { get { return m_AdaptiveFog; } set { m_AdaptiveFog = value; } } bool m_DefaultFog; float m_DefaultFarClipPlane = -1; float m_DefaultDensity = 0; /// /// Ensures settings are applied during startup. /// protected override void Awake() { base.Awake(); ApplyDefaultSetting(AdaptiveFogSetting); } /// /// Callback when scaler gets disabled and removed from indexer /// protected override void OnDisabled() { RenderSettings.fogDensity = m_DefaultDensity; RenderSettings.fog = m_DefaultFog; if (!Camera.main || m_DefaultFarClipPlane == -1) return; Camera.main.farClipPlane = m_DefaultFarClipPlane; } /// /// Callback when scaler gets enabled and added to the indexer /// protected override void OnEnabled() { m_DefaultFog = RenderSettings.fog; m_DefaultDensity = RenderSettings.fogDensity; if (!Camera.main) return; m_DefaultFarClipPlane = Camera.main.farClipPlane; } /// /// Callback for any level change. /// protected override void OnLevel() { if (ScaleChanged()) { Debug.Log(Scale); if (RenderSettings.fogMode == FogMode.Linear) { if (!Camera.main || Scale == 0) return; if (m_DefaultFarClipPlane == -1) m_DefaultFarClipPlane = Camera.main.farClipPlane; Camera.main.farClipPlane = Scale * 1000; RenderSettings.fogEndDistance = Camera.main.farClipPlane; } else { RenderSettings.fog = Scale == 0 ? false : true; RenderSettings.fogDensity = m_DefaultDensity * Scale; } } } } }