hch
2025-12-04 dfe911cae4451f4df04316145fe1f67d433c62f4
Merge branch 'master' of http://mobile.secondworld.net.cn:10010/r/Project_SG_scripts
5个文件已修改
139 ■■■■■ 已修改文件
Main/System/Battle/BattleObject/BattleObject.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleObject/BattleObjectFactory.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleResources/BattleCacheManager.cs 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Chat/ChatManager.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Chat/ChatWin.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleObject/BattleObject.cs
@@ -359,7 +359,7 @@
            {
                if (!buffMgr.isControled[BattleConst.HardControlGroup])
                {
                    battleField.soundManager.PlayEffectSound(teamHero.heroConfig.HitSFX);
                    battleField.soundManager.PlayEffectSound(teamHero.heroConfig.HitSFX, false);
                    motionBase.PlayAnimation(MotionName.hit, false);
                }
            }
Main/System/Battle/BattleObject/BattleObjectFactory.cs
@@ -31,11 +31,10 @@
            return null;
        }
        // ===== 简化:直接从缓存获取,缓存内部会自动加载 =====
        SkeletonDataAsset skeletonDataAsset = BattleResManager.Instance.GetSpineResource(
        // ===== 直接加载资源(非预加载的资源不走缓存系统)=====
        SkeletonDataAsset skeletonDataAsset = ResManager.Instance.LoadAsset<SkeletonDataAsset>(
            "Hero/SpineRes/", 
            skinCfg.SpineRes,
            _battleField.guid
            skinCfg.SpineRes
        );
        
        if (skeletonDataAsset == null)
Main/System/Battle/BattleResources/BattleCacheManager.cs
@@ -259,4 +259,117 @@
        
        return $"Spine: {spineTotal}, Audio: {audioTotal}";
    }
    // ===== 编辑器调试接口 =====
#if UNITY_EDITOR
    // 编辑器模式下的资源引用调试类
    public class ResourceReferenceDebug
    {
        public BattleResCache.CachedResource CachedResource;
        public Dictionary<string, HashSet<string>> BattlefieldOwners;
        public int RefCount
        {
            get
            {
                int count = 0;
                foreach (var owners in BattlefieldOwners.Values)
                {
                    count += owners.Count;
                }
                return count;
            }
        }
        // 私有构造函数,只能由 DebugAPI 调用
        internal ResourceReferenceDebug()
        {
        }
    }
    public static class DebugAPI
    {
        public static Dictionary<string, ResourceReferenceDebug> GetSpineCache()
        {
            var result = new Dictionary<string, ResourceReferenceDebug>();
            foreach (var kvp in globalSpineCache)
            {
                // 直接在这里赋值,不通过构造函数传递私有类
                result[kvp.Key] = new ResourceReferenceDebug
                {
                    CachedResource = kvp.Value.CachedResource,
                    BattlefieldOwners = kvp.Value.BattlefieldOwners
                };
            }
            return result;
        }
        public static Dictionary<string, ResourceReferenceDebug> GetAudioCache()
        {
            var result = new Dictionary<string, ResourceReferenceDebug>();
            foreach (var kvp in globalAudioCache)
            {
                result[kvp.Key] = new ResourceReferenceDebug
                {
                    CachedResource = kvp.Value.CachedResource,
                    BattlefieldOwners = kvp.Value.BattlefieldOwners
                };
            }
            return result;
        }
        public static int GetTotalSpineCount() => globalSpineCache.Count;
        public static int GetTotalAudioCount() => globalAudioCache.Count;
        public static HashSet<string> GetAllBattleGuids()
        {
            var guids = new HashSet<string>();
            foreach (var refInfo in globalSpineCache.Values)
            {
                foreach (var guid in refInfo.BattlefieldOwners.Keys)
                {
                    guids.Add(guid);
                }
            }
            foreach (var refInfo in globalAudioCache.Values)
            {
                foreach (var guid in refInfo.BattlefieldOwners.Keys)
                {
                    guids.Add(guid);
                }
            }
            return guids;
        }
        public static void ClearAllCache()
        {
            globalSpineCache.Clear();
            globalAudioCache.Clear();
            Debug.Log("BattleCacheManager: All cache cleared (Editor only)");
        }
    }
    // 资源引用视图类(供编辑器使用)
    public class ResourceReferenceView
    {
        public string ResourceKey;
        public string ResourcePath;
        public bool IsLoaded;
        public int TotalRefCount;
        public Dictionary<string, int> BattlefieldRefCounts = new Dictionary<string, int>();
        public ResourceReferenceView(string key, ResourceReferenceDebug refInfo)
        {
            ResourceKey = key;
            ResourcePath = refInfo.CachedResource.Identifier.Directory + "/" + refInfo.CachedResource.Identifier.AssetName;
            IsLoaded = refInfo.CachedResource.Asset != null;
            TotalRefCount = refInfo.RefCount;
            foreach (var kvp in refInfo.BattlefieldOwners)
            {
                BattlefieldRefCounts[kvp.Key] = kvp.Value.Count;
            }
        }
    }
#endif
}
Main/System/Chat/ChatManager.cs
@@ -338,6 +338,7 @@
    public readonly int maxTalkCount = 1000;  //聊天数量上限
    public readonly int deleteTalkCount = 300;  //聊天数量上限时删除前多少条
    public event Action<ChatChannel> OnDeleteTalkEvent;
    void TryDeleteTalkData(ChatChannel type)
    {
@@ -346,6 +347,7 @@
        if (datas.Count < maxTalkCount)
            return;
        datas.RemoveRange(0, deleteTalkCount);
        OnDeleteTalkEvent?.Invoke(type);
    }
    public int currentDay = -1;
Main/System/Chat/ChatWin.cs
@@ -99,6 +99,7 @@
        manager.OnChatTabChangeEvent += OnChatTabChange;
        manager.OnUpdateTalkEvent += OnUpdateTalkEvent;
        manager.OnUpdateTalkCacheListEvent += OnUpdateTalkCacheList;
        manager.OnDeleteTalkEvent += OnDeleteTalkEvent;
        scrChatTab.OnRefreshCell += OnRefreshChatTabCell;
        scrWorld.OnGetDynamicSize += OnGetWorldChatDynamicSize;
@@ -110,6 +111,7 @@
        clickScreenOtherSpace.AddListener(OnClickScreenOtherSpace);
        GlobalTimeEvent.Instance.secondEvent += OnSecondEvent;
        isSettingOpen = false;
        transSettings.SetActive(isSettingOpen);
@@ -127,6 +129,7 @@
        manager.OnChatTabChangeEvent -= OnChatTabChange;
        manager.OnUpdateTalkEvent -= OnUpdateTalkEvent;
        manager.OnUpdateTalkCacheListEvent -= OnUpdateTalkCacheList;
        manager.OnDeleteTalkEvent -= OnDeleteTalkEvent;
        scrChatTab.OnRefreshCell -= OnRefreshChatTabCell;
        scrWorld.OnGetDynamicSize -= OnGetWorldChatDynamicSize;
@@ -139,6 +142,18 @@
        clickScreenOtherSpace.RemoveAllListeners();
    }
    private void OnDeleteTalkEvent(ChatChannel channel)
    {
        if (channel == ChatChannel.World)
        {
            CreateScroller(scrWorld, channel);
        }
        else if (channel == ChatChannel.Guild)
        {
            CreateScroller(scrGuild, channel);
        }
    }
    private void OnRefreshGuildCell(ScrollerDataType type, CellView cell)
    {
        OnRefreshCell(type, cell);