This commit is contained in:
2026-10-10 14:47:01 +08:00
parent b5881a6cc4
commit c39586ad1e
19 changed files with 104 additions and 89 deletions
@@ -1412,6 +1412,16 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
BulletPool.Instance.ClearAll();
EffectPool.Instance.ClearAll();
_resourcesUnloaded = true;
// ⭐ 真正回收内存:Addressables 释放包用的是 AssetBundle.Unload(false) 语义 ——
// 只是断开引用,已加载的贴图/材质/网格/音频要等 UnloadUnusedAssets 才真正销毁。
// iOS 上不调用就会出现"AA 包卸载了但占用内存不降",连续进第二个游戏内存叠加 → jetsam 闪退。
// 用 Task 等待(不依赖本面板协程,OnHide 隐藏后也能跑完)。
await Task.Delay(50); // 等两帧左右让 Destroy 的延迟销毁生效
var unloadOp = Resources.UnloadUnusedAssets();
while (!unloadOp.isDone) await Task.Yield();
System.GC.Collect();
Debug.Log($"[内存] 离房回收完成 | 已分配 {UnityEngine.Profiling.Profiler.GetTotalAllocatedMemoryLong() / 1048576}MB");
}
/// <summary>资源是否已卸载(避免 OnHide 重复卸载)</summary>
@@ -1548,6 +1558,15 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
SetUnloadProgress(0.6f);
await MonsterMoveLine.UnLoadBezier();
// ⭐ 真正回收内存:AA 包卸载只是断开引用(Unload(false) 语义),贴图/材质/网格/音频
// 要等 UnloadUnusedAssets 才真正销毁 —— iOS 上不做这步 = 占用不降,
// 连进第二个游戏内存叠加超限 → jetsam 闪退
await Task.Delay(50);
var leaveUnloadOp = Resources.UnloadUnusedAssets();
while (!leaveUnloadOp.isDone) await Task.Yield();
System.GC.Collect();
Debug.Log($"[内存] 离房回收完成 | 已分配 {UnityEngine.Profiling.Profiler.GetTotalAllocatedMemoryLong() / 1048576}MB");
// ⭐ 预载回大厅的主面板 prefab:鱼包已卸载腾出内存,加载大厅包不会叠峰值;
// 后面等待 socket 的时间足够它加载完,finally 里 ShowAsync(HomeMainPanel) 命中缓存秒开。
// (进房时 ReleaseHomeUI 已释放大厅资源,散包后回大厅各子面板首次打开按需单独加载)