45 lines
1.2 KiB
C#
45 lines
1.2 KiB
C#
using UnityEngine;
|
|
using UnityEngine.EventSystems;
|
|
using UnityEngine.SceneManagement;
|
|
|
|
namespace GameFramework
|
|
{
|
|
/// <summary>
|
|
/// 全局唯一的 EventSystem 管理器。
|
|
/// 挂到 MainMenu 场景的 EventSystem 上,让它 DontDestroyOnLoad 跨场景存活。
|
|
/// 每次新场景加载时自动检测并销毁多余的 EventSystem,保证全局只有一个。
|
|
/// </summary>
|
|
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<EventSystem>();
|
|
foreach (var es in allSystems)
|
|
{
|
|
// 保留自己,销毁其他 EventSystem
|
|
if (es.gameObject != gameObject)
|
|
Destroy(es.gameObject);
|
|
}
|
|
}
|
|
}
|
|
}
|