1
This commit is contained in:
@@ -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 已释放大厅资源,散包后回大厅各子面板首次打开按需单独加载)
|
||||
|
||||
Reference in New Issue
Block a user