Пример #1
0
    private static void ClearGameEvents()
    {
        List <GameEventLeakData> leakData = new List <GameEventLeakData>();

        string[] gameEventGUIDs = AssetDatabase.FindAssets("t:GameEvent");
        foreach (string guid in gameEventGUIDs)
        {
            string    path      = AssetDatabase.GUIDToAssetPath(guid);
            GameEvent gameEvent = AssetDatabase.LoadAssetAtPath <GameEvent>(path);
            if (gameEvent && gameEvent.ListenerCount > 0)
            {
                leakData.Add(new GameEventLeakData(gameEvent.name, gameEvent.ListenerCount));
                gameEvent.Clear();
            }
        }

        string[] gameActionGUIDs = AssetDatabase.FindAssets("t:GameAction");
        foreach (string guid in gameActionGUIDs)
        {
            string     path       = AssetDatabase.GUIDToAssetPath(guid);
            GameAction gameAction = AssetDatabase.LoadAssetAtPath <GameAction>(path);
            if (gameAction && gameAction.ListenerCount > 0)
            {
                leakData.Add(new GameEventLeakData(gameAction.name, gameAction.ListenerCount));
                gameAction.Clear();
            }
        }

        string[] audioSettingsGUIDs = AssetDatabase.FindAssets("t:AudioSettings");
        foreach (string guid in audioSettingsGUIDs)
        {
            string        path     = AssetDatabase.GUIDToAssetPath(guid);
            AudioSettings settings = AssetDatabase.LoadAssetAtPath <AudioSettings>(path);
            if (settings != null)
            {
                int leakAmount = GetAudioSettingsLeakAmount(settings);
                if (leakAmount > 0)
                {
                    leakData.Add(new GameEventLeakData(settings.name, leakAmount));
                }
                settings.MusicVolumeChanged = null;
                settings.SfxVolumeChanged   = null;
                settings.ToggleMute         = null;
            }
        }

        if (leakData.Count > 0)
        {
            leakData.ForEach((data) => {
                Debug.Log($"{data.name}: {data.leakAmount}");
            });
        }
        else
        {
            Debug.Log("No Leaks detected");
        }
    }