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);
}
}
}
}