using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Rendering; using UnityEngine.UI; using UnityEngine.SceneManagement; public class InGameManager : MonoBehaviour { [SerializeField] private Volume gameVolume; [SerializeField] private Volume pausedVolume; [SerializeField] private bool isPaused = false; private bool isTransitioning = false; [SerializeField] private float pauseTransitionDuration = 1f; [SerializeField] private Canvas gameCanvas; [SerializeField] private Canvas pausedCanvas; public bool IsPaused { get { return this.isPaused; } } public void TogglePause() { if (!isTransitioning) { isPaused = !isPaused; Cursor.visible = isPaused; if (!isPaused) { Cursor.lockState = CursorLockMode.Locked; } else { Cursor.lockState = CursorLockMode.None; } StartCoroutine(pauseTransition()); } } public void UnPause() { if (!isTransitioning) { isPaused = false; Cursor.lockState = CursorLockMode.Locked; Cursor.visible = isPaused; StartCoroutine(pauseTransition()); } } public void Pause() { if (!isTransitioning) { isPaused = true; Cursor.lockState = CursorLockMode.None; Cursor.visible = isPaused; StartCoroutine(pauseTransition()); } } IEnumerator pauseTransition() { if (pausedCanvas.gameObject.activeInHierarchy && !isPaused) { pausedCanvas.gameObject.SetActive(false); } if (gameCanvas.gameObject.activeInHierarchy && isPaused) { gameCanvas.gameObject.SetActive(false); } this.isTransitioning = true; yield return new WaitForSeconds(0); this.isTransitioning = false; print("Unpause canvas?" + isPaused+","+pausedCanvas.gameObject.activeInHierarchy); if (!pausedCanvas.gameObject.activeInHierarchy && isPaused) { pausedCanvas.gameObject.SetActive(true); } if (!gameCanvas.gameObject.activeInHierarchy && !isPaused) { gameCanvas.gameObject.SetActive(true); } } // Start is called before the first frame update void Start() { isPaused = false; Cursor.lockState = CursorLockMode.Locked; Cursor.visible = isPaused; gameVolume.weight = 1; pausedVolume.weight = 0; gameCanvas.gameObject.SetActive(true); pausedCanvas.gameObject.SetActive(false); } // Update is called once per frame void Update() { if (Input.GetButtonDown("Pause")) { this.TogglePause(); print("Toggled!"); } if (isTransitioning||true) { if (isPaused) { //transition into pause //gameVolume.weight = Mathf.Lerp(gameVolume.weight, 0, Time.deltaTime); //pausedVolume.weight = Mathf.Lerp(pausedVolume.weight, 1, Time.deltaTime); //gameVolume.weight = gameVolume.weight < 0.1 ? 0 : gameVolume.weight; //pausedVolume.weight = pausedVolume.weight > 0.9 ? 1 : pausedVolume.weight; gameVolume.weight = 0; pausedVolume.weight = 1; } else { //transition out of pause gameVolume.weight = 1; pausedVolume.weight = 0; } } } public void ExitToMenu() { SceneManager.LoadScene(0); } }