using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.EventSystems; public class SceneNavigationManager : MonoBehaviour { private static SceneNavigationManager instance; private static List sceneHistory = new List(); void Awake() { if (instance == null) { instance = this; DontDestroyOnLoad(gameObject); Debug.Log("SceneNavigationManager dibuat"); } } public void LoadScene(string sceneName) { string currentScene = SceneManager.GetActiveScene().name; if (sceneName == currentScene) { Debug.LogWarning("Scene yang dipilih sama dengan scene saat ini. Tidak berpindah."); return; } // Simpan scene saat ini sebelum pindah ke scene baru if (sceneHistory.Count == 0 || sceneHistory[sceneHistory.Count - 1] != currentScene) { sceneHistory.Add(currentScene); } // Gunakan LoadSceneAsync untuk perpindahan lebih lancar SceneManager.LoadSceneAsync(sceneName).completed += (operation) => { Debug.Log("Pindah ke scene: " + sceneName); EnsureEventSystemExists(); }; } public void GoBack() { if (sceneHistory.Count > 0) { string previousScene = sceneHistory[sceneHistory.Count - 1]; sceneHistory.RemoveAt(sceneHistory.Count - 1); SceneManager.LoadSceneAsync(previousScene).completed += (operation) => { Debug.Log("Kembali ke scene: " + previousScene); EnsureEventSystemExists(); }; } else { Debug.LogWarning("Tidak ada scene sebelumnya!"); } } // Pastikan EventSystem tetap ada private void EnsureEventSystemExists() { if (FindFirstObjectByType() == null) { GameObject eventSystem = new GameObject("EventSystem", typeof(UnityEngine.EventSystems.EventSystem), typeof(UnityEngine.EventSystems.StandaloneInputModule)); DontDestroyOnLoad(eventSystem); Debug.Log("EventSystem baru dibuat!"); } } }