#if EXPANSE_PRESENT using HDRP.Lightweight; #endif using UnityEngine; using UnityEngine.Rendering; #if GeNa_HDRP using UnityEngine.Rendering.HighDefinition; #endif #if UNITY_EDITOR using UnityEditor; #endif #if GAIA_2_PRESENT && !GAIA_PRO_PRESENT using Gaia; #if HDRPTIMEOFDAY && HDPipeline && UNITY_2021_2_OR_NEWER using ProceduralWorlds.HDRPTOD; #endif #elif GAIA_PRO_PRESENT using Gaia; #if HDPipeline && UNITY_2021_2_OR_NEWER || HDRPTIMEOFDAY && HDPipeline && UNITY_2021_2_OR_NEWER using ProceduralWorlds.HDRPTOD; #endif #endif namespace GeNa.Core { public enum EmissionRenderType { GameObject, Material, Both, None } public enum SkyTypeMode { Gaia, Expanse } [ExecuteAlways] public class GaiaTimeOfDayLightSync : MonoBehaviour { #region Variables #region Public public SkyTypeMode m_skyMode = SkyTypeMode.Gaia; public bool m_overrideSystemActiveState = false; public bool SystemActive { get => m_systemActive; set { if (m_systemActive != value) { m_systemActive = value; if (!m_systemActive) { m_isNight = false; } else { CheckNightStatus(); } SetLightStatus(false, false); } } } [HideInInspector] [SerializeField] private bool m_systemActive = false; public LightShadows LightShadowMode { get => m_lightShadowMode; set { if (m_lightShadowMode != value) { m_lightShadowMode = value; if (!m_systemActive) { m_isNight = false; } else { CheckNightStatus(); } SetLightStatus(false, false); } } } [HideInInspector] [SerializeField] private LightShadows m_lightShadowMode = LightShadows.None; public Constants.LightSyncCullingMode LightCullingMode { get => m_lightCullingMode; set { if (m_lightCullingMode != value) { m_lightCullingMode = value; SetLightStatus(false, false); } } } [HideInInspector] [SerializeField] private Constants.LightSyncCullingMode m_lightCullingMode = Constants.LightSyncCullingMode.ShadowOnly; public float LightCullingDistance { get => m_lightCullingDistance; set { if (m_lightCullingDistance != value) { m_lightCullingDistance = value; SetLightStatus(false, false); } } } [HideInInspector] [SerializeField] private float m_lightCullingDistance = 70f; public float LightEmissionCullingDistance { get => m_lightEmissionCullingDistance; set { if (m_lightEmissionCullingDistance != value) { m_lightEmissionCullingDistance = value; SetLightStatus(false, false); } } } [HideInInspector] [SerializeField] private float m_lightEmissionCullingDistance = 250f; public int CullingWaitForFrames { get => m_cullingWaitForFrames; set { if (m_cullingWaitForFrames != value) { m_cullingWaitForFrames = value; SetLightStatus(false, false); } } } [HideInInspector] [SerializeField] private int m_cullingWaitForFrames = 100; public Light m_lightComponent; public GameObject m_lightEmissionObject; public Material m_emissionMaterial; public string m_enableEmissioKeyWord = "_EMISSION"; public EmissionRenderType m_emissionRenderType = EmissionRenderType.GameObject; [HideInInspector] public bool PreviewSyncLightCullingInEditor = false; #endregion #region Private private Transform m_player; private Transform m_sceneCamera; private bool m_isNight; #if GeNa_HDRP private HDAdditionalLightData m_lightData; #endif private bool m_lastLightState = false; [SerializeField] private bool m_genaManagerExists = false; //private bool m_currentStatus = false; //private int m_currentCullingWaitForFrames; [HideInInspector] [SerializeField] private bool m_lightComponentExists = false; [HideInInspector] [SerializeField] private bool m_lightEmissionObjectExists = false; [HideInInspector] [SerializeField] private bool m_lightEmissionMaterialExists = false; [HideInInspector] [SerializeField] private bool m_playerExists = false; [HideInInspector] [SerializeField] private bool m_gaiaProExists = false; [HideInInspector, SerializeField] private bool m_isHDRP = false; #endregion #endregion #region Unity Functions private void OnEnable() { #if GAIA_2_PRESENT m_isHDRP = GaiaUtils.GetActivePipeline() == GaiaConstants.EnvironmentRenderer.HighDefinition; #else m_isHDRP = false; if (GraphicsSettings.renderPipelineAsset != null) { m_isHDRP = GraphicsSettings.renderPipelineAsset.GetType().ToString().Contains("HDRenderPipelineAsset"); } #endif ValidateComponents(); LoadPreferences(GeNaGlobalReferences.GeNaManagerInstance); #if UNITY_EDITOR AssemblyReloadEvents.afterAssemblyReload -= SubscribeToEvents; AssemblyReloadEvents.afterAssemblyReload += SubscribeToEvents; SubscribeToEvents(); if (Application.isPlaying) { AssemblyReloadEvents.afterAssemblyReload -= SubscribeToEvents; EditorApplication.update -= UpdateLights; } #endif } #if UNITY_EDITOR private void SubscribeToEvents() { EditorApplication.update -= UpdateLights; EditorApplication.update += UpdateLights; } #endif #if UNITY_EDITOR private void OnDestroy() { AssemblyReloadEvents.afterAssemblyReload -= SubscribeToEvents; EditorApplication.update -= UpdateLights; } private void OnDisable() { AssemblyReloadEvents.afterAssemblyReload -= SubscribeToEvents; EditorApplication.update -= UpdateLights; } #endif private void LateUpdate() { UpdateLights(); } public void UpdateLights() { if (!Application.isPlaying) { if (m_sceneCamera == null) { m_sceneCamera = GetEditorPlayer(); } } if (!m_overrideSystemActiveState) { if (m_lightComponentExists) { if (!SystemActive) { m_isNight = false; } else { CheckNightStatus(); } SetLightStatus(); } } } #endregion #region Public Functions /// /// Validates the components in this system /// public void ValidateComponents(Transform player = null) { if (m_lightComponent == null) { m_lightComponent = GetComponent(); } m_lightComponentExists = m_lightComponent != null; #if GeNa_HDRP if (m_lightComponentExists) { HDAdditionalLightData[] lightingData = m_lightComponent.GetComponentsInParent(true); if (lightingData != null && lightingData.Length > 0) { m_lightData = lightingData[0]; } } m_lightComponentExists = m_lightData != null; #endif m_lightEmissionObjectExists = m_lightEmissionObject != null; m_lightEmissionMaterialExists = m_emissionMaterial != null; if (player == null) { if (m_player == null) { m_player = GetPlayer(); } if (player != null) { m_player = player; } } else { m_player = player; } m_genaManagerExists = GeNaGlobalReferences.GeNaManagerInstance != null; m_playerExists = m_player != null; #if GAIA_PRO_PRESENT m_gaiaProExists = ProceduralWorldsGlobalWeather.Instance != null; #if HDPipeline && UNITY_2021_2_OR_NEWER m_gaiaProExists = HDRPTimeOfDay.Instance != null; #endif #else m_gaiaProExists = false; #if HDRPTIMEOFDAY && HDPipeline && UNITY_2021_2_OR_NEWER m_gaiaProExists = HDRPTimeOfDay.Instance != null; #endif #endif #if EXPANSE_PRESENT ExpanseController controller = ExpanseController.Instance; if (controller != null) { m_skyMode = SkyTypeMode.Expanse; } #endif UpdateLightData(); if (!SystemActive) { m_isNight = false; m_lastLightState = false; SetLightStatus(false, false); } else { SetLightStatus(false, false); } } /// /// Sets the light status /// /// public void SetLightStatus(bool getSettings = false, bool useLightStateCheck = false) { if (m_genaManagerExists) { if (getSettings) { GeNaGlobalReferences.GeNaManagerInstance.GetTimeOfDayLightSyncSettings(out m_systemActive, out PreviewSyncLightCullingInEditor, out m_lightShadowMode, out m_lightCullingMode, out m_lightCullingDistance, out m_cullingWaitForFrames); } } if (!m_lastLightState && !m_isNight) { return; } if (Application.isPlaying) { if (m_lastLightState != m_isNight && useLightStateCheck) { UpdateCulling(m_player); } else if (!useLightStateCheck) { UpdateCulling(m_player); } } else { if (m_lastLightState != m_isNight && useLightStateCheck) { UpdateCulling(m_sceneCamera); } else if (!useLightStateCheck) { UpdateCulling(m_sceneCamera); } } } /// /// Update the light settings /// /// public void UpdateLightSettings(bool getSettings = false) { if (m_genaManagerExists) { if (getSettings) { GeNaGlobalReferences.GeNaManagerInstance.GetTimeOfDayLightSyncSettings(out m_systemActive, out PreviewSyncLightCullingInEditor, out m_lightShadowMode, out m_lightCullingMode, out m_lightCullingDistance, out m_cullingWaitForFrames); } } if (Application.isPlaying) { SetCullingMode(true, LightCullingMode, m_player); } else { SetCullingMode(true, LightCullingMode, m_sceneCamera); } } /// /// Gets the settings from the GeNa manager /// /// public void GetLightRenderSettings() { if (m_genaManagerExists) { GeNaGlobalReferences.GeNaManagerInstance.GetTimeOfDayLightSyncSettings(out m_systemActive, out PreviewSyncLightCullingInEditor, out m_lightShadowMode, out m_lightCullingMode, out m_lightCullingDistance, out m_cullingWaitForFrames); } } #endregion #region Private Functions /// /// Updates the is night bool in the system /// private void CheckNightStatus() { if (m_skyMode == SkyTypeMode.Gaia) { #if GAIA_PRO_PRESENT #if HDPipeline && UNITY_2021_2_OR_NEWER if (m_isHDRP) { m_gaiaProExists = HDRPTimeOfDay.Instance != null; } #endif if (m_gaiaProExists) { if (m_isHDRP) { #if HDRPTIMEOFDAY && HDPipeline && UNITY_2021_2_OR_NEWER || GAIA_PRO_PRESENT && HDPipeline && UNITY_2021_2_OR_NEWER m_isNight = !HDRPTimeOfDay.Instance.IsDayTime(); #endif } else { m_isNight = ProceduralWorldsGlobalWeather.Instance.CheckIsNight(); } } #else #if HDRPTIMEOFDAY && HDPipeline && UNITY_2021_2_OR_NEWER if (m_isHDRP) { if (HDRPTimeOfDay.Instance != null) { m_isNight = !HDRPTimeOfDay.Instance.IsDayTime(); } } #endif #endif } else { #if EXPANSE_PRESENT m_isNight = ExpanseController.Instance.IsNight; #else Debug.LogWarning("If you're using expanse please add the script define EXPANSE_PRESENT to use expanse features."); #endif } } /// /// Checks if the light needs to be updated /// private void UpdateCulling(Transform player) { m_lastLightState = m_isNight; m_playerExists = player; if (!m_playerExists || !m_lightComponentExists) { return; } if (!SystemActive) { SetCullingMode(false, LightCullingMode, player); return; } else if (LightCullingMode == Constants.LightSyncCullingMode.None) { SetCullingMode(m_isNight, LightCullingMode, player); return; } else if (!m_gaiaProExists && m_skyMode == SkyTypeMode.Gaia) { m_isNight = false; SetCullingMode(false, LightCullingMode, player); } else if (m_skyMode == SkyTypeMode.Expanse) { SetCullingMode(m_isNight, LightCullingMode, player); } else { if (m_isHDRP) { SetCullingMode(m_isNight, LightCullingMode, player); } } } /// /// Sets up the culling mode based on the active bool and culling mode /// /// /// /// /// private void SetCullingMode(bool active, Constants.LightSyncCullingMode cullingMode, Transform player) { switch (m_emissionRenderType) { case EmissionRenderType.GameObject: { if (!m_lightComponentExists || !m_lightEmissionObjectExists) { return; } break; } case EmissionRenderType.Material: { if (!m_lightComponentExists || !m_lightEmissionMaterialExists) { return; } break; } case EmissionRenderType.Both: { if (!m_lightComponentExists || !m_lightEmissionMaterialExists || !m_lightEmissionObjectExists) { return; } break; } case EmissionRenderType.None: { if (!m_lightComponentExists) { return; } break; } } if (active) { switch (cullingMode) { case Constants.LightSyncCullingMode.ShadowOnly: { if (Vector3.Distance(m_lightComponent.transform.position, player.position) <= LightCullingDistance) { m_lightComponent.shadows = m_lightShadowMode; } else { m_lightComponent.shadows = LightShadows.None; } if (!m_overrideSystemActiveState) { if (!m_isNight) { m_lightComponent.enabled = false; #if GeNa_HDRP m_lightData.enabled = false; #endif } else { float distance = Vector3.Distance(m_lightComponent.transform.position, player.position); m_lightComponent.enabled = distance <= LightEmissionCullingDistance; #if GeNa_HDRP m_lightData.enabled = distance <= LightEmissionCullingDistance; #endif } if (m_emissionRenderType != EmissionRenderType.None) { switch (m_emissionRenderType) { case EmissionRenderType.GameObject: m_lightEmissionObject.SetActive(m_isNight); break; case EmissionRenderType.Material: if (m_isNight) { m_emissionMaterial.EnableKeyword(m_enableEmissioKeyWord); } else { m_emissionMaterial.DisableKeyword(m_enableEmissioKeyWord); } break; case EmissionRenderType.Both: m_lightEmissionObject.SetActive(m_isNight); if (m_isNight) { m_emissionMaterial.EnableKeyword(m_enableEmissioKeyWord); } else { m_emissionMaterial.DisableKeyword(m_enableEmissioKeyWord); } break; } } } break; } case Constants.LightSyncCullingMode.LightAndShadow: { if (Vector3.Distance(m_lightComponent.transform.position, player.position) <= LightCullingDistance) { m_lightComponent.shadows = m_lightShadowMode; } else { m_lightComponent.shadows = LightShadows.None; } if (!m_overrideSystemActiveState) { if (!m_isNight) { m_lightComponent.enabled = false; #if GeNa_HDRP m_lightData.enabled = false; #endif } else { float distance = Vector3.Distance(m_lightComponent.transform.position, player.position); m_lightComponent.enabled = distance <= LightEmissionCullingDistance; #if GeNa_HDRP m_lightData.enabled = distance <= LightEmissionCullingDistance; #endif } if (m_emissionRenderType != EmissionRenderType.None) { switch (m_emissionRenderType) { case EmissionRenderType.GameObject: m_lightEmissionObject.SetActive(m_isNight); break; case EmissionRenderType.Material: if (m_isNight) { m_emissionMaterial.EnableKeyword(m_enableEmissioKeyWord); } else { m_emissionMaterial.DisableKeyword(m_enableEmissioKeyWord); } break; case EmissionRenderType.Both: m_lightEmissionObject.SetActive(m_isNight); if (m_isNight) { m_emissionMaterial.EnableKeyword(m_enableEmissioKeyWord); } else { m_emissionMaterial.DisableKeyword(m_enableEmissioKeyWord); } break; } } } break; } case Constants.LightSyncCullingMode.None: { if (Vector3.Distance(m_lightComponent.transform.position, player.position) <= LightCullingDistance) { m_lightComponent.shadows = m_lightShadowMode; } else { m_lightComponent.shadows = LightShadows.None; } if (!m_overrideSystemActiveState) { if (!m_isNight) { m_lightComponent.enabled = false; #if GeNa_HDRP m_lightData.enabled = false; #endif } else { float distance = Vector3.Distance(m_lightComponent.transform.position, player.position); m_lightComponent.enabled = distance <= LightEmissionCullingDistance; #if GeNa_HDRP m_lightData.enabled = distance <= LightEmissionCullingDistance; #endif } if (m_emissionRenderType != EmissionRenderType.None) { switch (m_emissionRenderType) { case EmissionRenderType.GameObject: m_lightEmissionObject.SetActive(m_isNight); break; case EmissionRenderType.Material: if (m_isNight) { m_emissionMaterial.EnableKeyword(m_enableEmissioKeyWord); } else { m_emissionMaterial.DisableKeyword(m_enableEmissioKeyWord); } break; case EmissionRenderType.Both: m_lightEmissionObject.SetActive(m_isNight); if (m_isNight) { m_emissionMaterial.EnableKeyword(m_enableEmissioKeyWord); } else { m_emissionMaterial.DisableKeyword(m_enableEmissioKeyWord); } break; } } } break; } } } else { switch (cullingMode) { case Constants.LightSyncCullingMode.ShadowOnly: { m_lightComponent.shadows = LightShadows.None; if (!m_overrideSystemActiveState) { m_lightComponent.enabled = false; #if GeNa_HDRP m_lightData.enabled = false; #endif if (m_emissionRenderType != EmissionRenderType.None) { switch (m_emissionRenderType) { case EmissionRenderType.GameObject: m_lightEmissionObject.SetActive(m_isNight); break; case EmissionRenderType.Material: if (m_isNight) { m_emissionMaterial.EnableKeyword(m_enableEmissioKeyWord); } else { m_emissionMaterial.DisableKeyword(m_enableEmissioKeyWord); } break; case EmissionRenderType.Both: m_lightEmissionObject.SetActive(m_isNight); if (m_isNight) { m_emissionMaterial.EnableKeyword(m_enableEmissioKeyWord); } else { m_emissionMaterial.DisableKeyword(m_enableEmissioKeyWord); } break; } } } break; } case Constants.LightSyncCullingMode.LightAndShadow: { m_lightComponent.shadows = LightShadows.None; if (!m_overrideSystemActiveState) { m_lightComponent.enabled = false; #if GeNa_HDRP m_lightData.enabled = false; #endif if (m_emissionRenderType != EmissionRenderType.None) { switch (m_emissionRenderType) { case EmissionRenderType.GameObject: m_lightEmissionObject.SetActive(false); break; case EmissionRenderType.Material: m_emissionMaterial.DisableKeyword(m_enableEmissioKeyWord); break; case EmissionRenderType.Both: m_lightEmissionObject.SetActive(false); m_emissionMaterial.DisableKeyword(m_enableEmissioKeyWord); break; } } } break; } case Constants.LightSyncCullingMode.None: { m_lightComponent.shadows = m_lightShadowMode; if (!m_overrideSystemActiveState) { m_lightComponent.enabled = false; #if GeNa_HDRP m_lightData.enabled = false; #endif if (m_emissionRenderType != EmissionRenderType.None) { switch (m_emissionRenderType) { case EmissionRenderType.GameObject: m_lightEmissionObject.SetActive(false); break; case EmissionRenderType.Material: if (m_isNight) { m_emissionMaterial.EnableKeyword(m_enableEmissioKeyWord); } else { m_emissionMaterial.DisableKeyword(m_enableEmissioKeyWord); } break; case EmissionRenderType.Both: m_lightEmissionObject.SetActive(false); if (m_isNight) { m_emissionMaterial.EnableKeyword(m_enableEmissioKeyWord); } else { m_emissionMaterial.DisableKeyword(m_enableEmissioKeyWord); } break; } } } break; } } } } /// /// Updates the light settings to the manager settings /// private void UpdateLightData() { if (m_genaManagerExists) { GeNaGlobalReferences.GeNaManagerInstance.GetTimeOfDayLightSyncSettings(out m_systemActive, out PreviewSyncLightCullingInEditor, out m_lightShadowMode, out m_lightCullingMode, out m_lightCullingDistance, out m_cullingWaitForFrames); } if (m_lightComponent != null) { m_lightComponent.shadows = m_lightShadowMode; if (!m_overrideSystemActiveState) { m_lightComponent.enabled = m_isNight; if (m_emissionRenderType != EmissionRenderType.None) { if (m_lightEmissionObjectExists) { if (m_emissionRenderType != EmissionRenderType.None) { switch (m_emissionRenderType) { case EmissionRenderType.GameObject: m_lightEmissionObject.SetActive(m_isNight); break; case EmissionRenderType.Material: m_emissionMaterial.DisableKeyword(m_enableEmissioKeyWord); break; case EmissionRenderType.Both: m_lightEmissionObject.SetActive(m_isNight); m_emissionMaterial.DisableKeyword(m_enableEmissioKeyWord); break; } } } } } } } /// /// Gets the player transform /// /// private Transform GetPlayer() { GameObject playerObject = GameObject.Find(Constants.playerThirdPersonName); if (playerObject != null) { return playerObject.transform; } playerObject = GameObject.Find(Constants.playerFirstPersonName); if (playerObject != null) { return playerObject.transform; } playerObject = GameObject.Find(Constants.playerFlyCamName); if (playerObject != null) { return playerObject.transform; } playerObject = GameObject.Find("Player"); if (playerObject != null) { return playerObject.transform; } playerObject = GameObject.Find(Constants.playerXRName); if (playerObject != null) { return playerObject.transform; } Camera camera = FindObjectOfType(); if (camera != null) { return camera.gameObject.transform; } return null; } /// /// Gets the editor scene view camera to use as the player in scene view /// /// private Transform GetEditorPlayer() { #if UNITY_EDITOR SceneView sceneView = SceneView.lastActiveSceneView; if (sceneView != null) { Camera camera = sceneView.camera; if (camera != null) { return camera.transform; } } #endif return null; } /// /// Removes warning when gaia is not installed /// private void RemoveWarning() { if (m_isNight) { m_isNight = true; } if (m_gaiaProExists) { m_gaiaProExists = true; } } #endregion #region Public Static Functions /// /// Sets up the light sync with the transform /// Player transform required, can be either player or camera transform /// Recommended to use the player camera /// /// public static bool SetupLightSync(Transform player) { GaiaTimeOfDayLightSync[] allLightSyncs = GetAllInstances(); if (allLightSyncs.Length > 0) { foreach (GaiaTimeOfDayLightSync lightSync in allLightSyncs) { lightSync.ValidateComponents(player); } } return player != null; } /// /// Gets all the components in the scene /// /// public static GaiaTimeOfDayLightSync[] GetAllInstances() { return FindObjectsOfType(); } /// /// Loads editor prefs /// public static void LoadPreferences(GeNaManager manager) { #if UNITY_EDITOR if (manager != null) { //Extensions ValidateEditorPref(Constants.ENABLE_GAIA_TIME_OF_DAY_LIGHT_SYNC, Constants.EditorPrefsType.Bool, false); manager.EnableTimeOfDayLightSync = EditorPrefs.GetBool(Constants.ENABLE_GAIA_TIME_OF_DAY_LIGHT_SYNC); ValidateEditorPref(Constants.SET_GAIA_TIME_OF_DAY_PREVIEW_IN_EDITOR, Constants.EditorPrefsType.Bool, false); manager.PreviewSyncLightCullingInEditor = EditorPrefs.GetBool(Constants.SET_GAIA_TIME_OF_DAY_PREVIEW_IN_EDITOR); ValidateEditorPref(Constants.SET_GAIA_TIME_OF_DAY_LIGHT_SHADOWS_MODE, Constants.EditorPrefsType.Int, 0); manager.TimeOfDayLightSyncShadowMode = (LightShadows)EditorPrefs.GetInt(Constants.SET_GAIA_TIME_OF_DAY_LIGHT_SHADOWS_MODE); ValidateEditorPref(Constants.SET_GAIA_TIME_OF_DAY_LIGHT_CULLING_MODE, Constants.EditorPrefsType.Int, 0); manager.LightCullingMode = (Constants.LightSyncCullingMode)EditorPrefs.GetInt(Constants.SET_GAIA_TIME_OF_DAY_LIGHT_CULLING_MODE); ValidateEditorPref(Constants.SET_GAIA_TIME_OF_DAY_LIGHT_CULLING_DISTANCE, Constants.EditorPrefsType.Float, 70f); manager.LightCullingDistance = EditorPrefs.GetFloat(Constants.SET_GAIA_TIME_OF_DAY_LIGHT_CULLING_DISTANCE); ValidateEditorPref(Constants.SET_GAIA_TIME_OF_DAY_LIGHT_CULLING_WAIT_FOR_FRAMES, Constants.EditorPrefsType.Int, 100); manager.CullingWaitForFrames = EditorPrefs.GetInt(Constants.SET_GAIA_TIME_OF_DAY_LIGHT_CULLING_WAIT_FOR_FRAMES); } #endif } /// /// Used to check if the editor prefs key exists /// If not it will create one /// /// /// /// /// /// /// public static void ValidateEditorPref(string prefName, Constants.EditorPrefsType prefsType, bool prefsBool = false, float prefsFloat = 0f, int prefsInt = 0, string prefsString = "") { #if UNITY_EDITOR if (!EditorPrefs.HasKey(prefName)) { switch (prefsType) { case Constants.EditorPrefsType.Bool: EditorPrefs.SetBool(prefName, prefsBool); break; case Constants.EditorPrefsType.Float: EditorPrefs.SetFloat(prefName, prefsFloat); break; case Constants.EditorPrefsType.Int: EditorPrefs.SetInt(prefName, prefsInt); break; case Constants.EditorPrefsType.String: EditorPrefs.SetString(prefName, prefsString); break; } } #endif } /// /// Used to check if the editor prefs key exists /// If not it will create one /// /// /// /// /// /// /// public static void ValidateEditorPref(string prefName, Constants.EditorPrefsType prefsType, float prefsFloat = 0f, bool prefsBool = false, int prefsInt = 0, string prefsString = "") { #if UNITY_EDITOR if (!EditorPrefs.HasKey(prefName)) { switch (prefsType) { case Constants.EditorPrefsType.Bool: EditorPrefs.SetBool(prefName, prefsBool); break; case Constants.EditorPrefsType.Float: EditorPrefs.SetFloat(prefName, prefsFloat); break; case Constants.EditorPrefsType.Int: EditorPrefs.SetInt(prefName, prefsInt); break; case Constants.EditorPrefsType.String: EditorPrefs.SetString(prefName, prefsString); break; } } #endif } /// /// Used to check if the editor prefs key exists /// If not it will create one /// /// /// /// /// /// /// public static void ValidateEditorPref(string prefName, Constants.EditorPrefsType prefsType, int prefsInt = 0, bool prefsBool = false, float prefsFloat = 0, string prefsString = "") { #if UNITY_EDITOR if (!EditorPrefs.HasKey(prefName)) { switch (prefsType) { case Constants.EditorPrefsType.Bool: EditorPrefs.SetBool(prefName, prefsBool); break; case Constants.EditorPrefsType.Float: EditorPrefs.SetFloat(prefName, prefsFloat); break; case Constants.EditorPrefsType.Int: EditorPrefs.SetInt(prefName, prefsInt); break; case Constants.EditorPrefsType.String: EditorPrefs.SetString(prefName, prefsString); break; } } #endif } /// /// Used to check if the editor prefs key exists /// If not it will create one /// /// /// /// /// /// /// public static void ValidateEditorPref(string prefName, Constants.EditorPrefsType prefsType, string prefsString = "", bool prefsBool = false, float prefsFloat = 0f, int prefsInt = 0) { #if UNITY_EDITOR if (!EditorPrefs.HasKey(prefName)) { switch (prefsType) { case Constants.EditorPrefsType.Bool: EditorPrefs.SetBool(prefName, prefsBool); break; case Constants.EditorPrefsType.Float: EditorPrefs.SetFloat(prefName, prefsFloat); break; case Constants.EditorPrefsType.Int: EditorPrefs.SetInt(prefName, prefsInt); break; case Constants.EditorPrefsType.String: EditorPrefs.SetString(prefName, prefsString); break; } } #endif } #endregion } }