private void Initialize() { var existingCoroutineExecutorGameObject = GameObject.Find(gameObjectName); if (existingCoroutineExecutorGameObject != null) { m_GameObject = existingCoroutineExecutorGameObject; m_CoroutineExecutor = m_GameObject.GetComponent <CoroutineExecutor>(); if (m_CoroutineExecutor != null) { m_CoroutineExecutor.referenceCount++; return; } else { GameObject.DestroyImmediate(m_GameObject); m_GameObject = null; } } m_GameObject = new GameObject(gameObjectName) { hideFlags = HideFlags.HideInHierarchy | HideFlags.HideInInspector }; m_CoroutineExecutor = m_GameObject.AddComponent <CoroutineExecutor>(); m_ApplicationQuit = m_GameObject.AddComponent <ApplicationQuit>(); m_CoroutineExecutor.referenceCount++; GameObject.DontDestroyOnLoad(m_GameObject); }
public void Dispose() { if (!m_Disposed) { m_Disposed = true; m_CoroutineExecutor.referenceCount--; if (m_CoroutineExecutor.referenceCount == 0) { Object.DestroyImmediate(m_GameObject); } m_GameObject = null; m_CoroutineExecutor = null; m_ApplicationQuit = null; } }