using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.SceneManagement; namespace GameFramework { /// /// 全局唯一的 EventSystem 管理器。 /// 挂到 MainMenu 场景的 EventSystem 上,让它 DontDestroyOnLoad 跨场景存活。 /// 每次新场景加载时自动检测并销毁多余的 EventSystem,保证全局只有一个。 /// public class PersistentEventSystem : MonoBehaviour { void Awake() { DontDestroyOnLoad(gameObject); CleanupDuplicates(); // 监听场景加载,每次新场景进来都清理一次 SceneManager.sceneLoaded += OnSceneLoaded; } void OnDestroy() { SceneManager.sceneLoaded -= OnSceneLoaded; } void OnSceneLoaded(Scene scene, LoadSceneMode mode) { CleanupDuplicates(); } void CleanupDuplicates() { var allSystems = FindObjectsOfType(); foreach (var es in allSystems) { // 保留自己,销毁其他 EventSystem if (es.gameObject != gameObject) Destroy(es.gameObject); } } } }