| Main/System/Battle/BattleObject/BattleObject.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/Battle/BattleObject/BattleObjectFactory.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/Battle/BattleResources/BattleCacheManager.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/Chat/ChatManager.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/Chat/ChatWin.cs | ●●●●● 补丁 | 查看 | 原始文档 | 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);