1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
using UnityEngine;
using System.Collections.Generic;
 
public class BattleUnloadManager
{
    /// <summary>
    /// 卸载指定战场的蓝队资源
    /// </summary>
    public void UnloadBlueTeamResources(BattleCacheManager cacheManager, string battleGuid)
    {
        var blueSpineCache = cacheManager.GetSpineCache(false, battleGuid);
        var blueAudioCache = cacheManager.GetAudioCache(false, battleGuid);
        
        int spineCount = UnloadResourceCache(blueSpineCache);
        int audioCount = UnloadResourceCache(blueAudioCache);
        
        cacheManager.ClearBlueTeamCache(battleGuid);
        
        Debug.Log($"BattleUnloadManager: Unloaded blue team for battlefield {battleGuid} - Spine: {spineCount}, Audio: {audioCount}");
    }
    
    /// <summary>
    /// 卸载红队资源(队伍变更时使用)
    /// </summary>
    public void UnloadRedTeamResources(BattleCacheManager cacheManager)
    {
        var redSpineCache = cacheManager.GetSpineCache(true, "");
        var redAudioCache = cacheManager.GetAudioCache(true, "");
        
        int spineCount = UnloadResourceCache(redSpineCache);
        int audioCount = UnloadResourceCache(redAudioCache);
        
        cacheManager.ClearRedTeamCache();
        
        Debug.Log($"BattleUnloadManager: Unloaded red team - Spine: {spineCount}, Audio: {audioCount}");
    }
    
    /// <summary>
    /// 卸载整个资源缓存
    /// </summary>
    private int UnloadResourceCache(Dictionary<string, BattleResCache.CachedResource> cache)
    {
        int unloadCount = 0;
        
        foreach (var kvp in cache)
        {
            if (kvp.Value.CanUnload())
            {
                UnloadSingleResource(kvp.Value);
                unloadCount++;
            }
        }
        
        return unloadCount;
    }
    
    /// <summary>
    /// 卸载单个资源
    /// </summary>
    private void UnloadSingleResource(BattleResCache.CachedResource cachedRes)
    {
        if (cachedRes == null || cachedRes.Asset == null)
        {
            return;
        }
        
        string assetKey = cachedRes.Identifier.GetKey();
        
        // 卸载资源
        ResManager.Instance.UnloadAsset(
            cachedRes.Identifier.Directory.ToLower(), 
            cachedRes.Identifier.AssetName.ToLower()
        );
        
        Debug.Log($"BattleUnloadManager: Unloaded resource: {assetKey}");
    }
    
    /// <summary>
    /// 卸载所有资源
    /// </summary>
    public void UnloadAllResources(BattleCacheManager cacheManager, string battleGuid = "")
    {
        UnloadRedTeamResources(cacheManager);
        if (!string.IsNullOrEmpty(battleGuid))
        {
            UnloadBlueTeamResources(cacheManager, battleGuid);
        }
        
        Debug.Log("BattleUnloadManager: All resources unloaded");
    }
 
    /// <summary>
    /// 卸载战场资源
    /// </summary>
    public void UnloadBattleResources(BattleCacheManager cacheManager, string battleGuid)
    {
        // 卸载蓝队资源
        UnloadBlueTeamResources(cacheManager, battleGuid);
        
        // ===== 新增:注销战场红队引用(自动按引用计数卸载)=====
        cacheManager.UnregisterBattlefieldRedTeam(battleGuid);
    }
}