using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.ResourceManagement.AsyncOperations; using UnityEngine.ResourceManagement.ResourceProviders; using UnityEngine.SceneManagement; /// /// Allows a "cold start" in the editor, when pressing Play and not passing from the Initialisation scene. /// public class EditorColdStartup : MonoBehaviour { #if UNITY_EDITOR [SerializeField] private GameSceneSO _thisSceneSO = default; [SerializeField] private GameSceneSO _persistentManagersSO = default; [SerializeField] private AssetReference _notifyColdStartupChannel = default; private void Start() { if (!SceneManager.GetSceneByName(_persistentManagersSO.sceneReference.editorAsset.name).isLoaded) { _persistentManagersSO.sceneReference.LoadSceneAsync(LoadSceneMode.Additive, true).Completed += LoadEventChannel; } } private void LoadEventChannel(AsyncOperationHandle obj) { _notifyColdStartupChannel.LoadAssetAsync().Completed += OnNotifyChannelLoaded; } private void OnNotifyChannelLoaded(AsyncOperationHandle obj) { LoadEventChannelSO loadEventChannelSO = (LoadEventChannelSO)_notifyColdStartupChannel.Asset; loadEventChannelSO.RaiseEvent(_thisSceneSO); } #endif }