This commit is contained in:
2026-10-12 15:32:36 +08:00
parent e4cdbd25ba
commit 1d7e30540d
14 changed files with 473 additions and 529 deletions
@@ -167,6 +167,15 @@ public class MonsterMoveLine
private static AsyncOperationHandle<IList<TextAsset>> _bezierHandles;
public static async Task LoadBezierTxtAsync(string path, Action<float> onProgress = null)
{
// ⭐ 资源加载超过 0.1 秒才显示"加载中"界面(引用计数,快速加载不显示)
UIManager.BeginLoading();
try { await LoadBezierTxtAsyncCore(path, onProgress); }
finally { UIManager.EndLoading(); }
}
/// <summary>LoadBezierTxtAsync 的实际逻辑(外层负责"加载中"界面)</summary>
private static async Task LoadBezierTxtAsyncCore(string path, Action<float> onProgress)
{
// ⭐ 加载前先全量清空上一场的路线缓存:
// 各玩法普通路线/鱼阵曲线名完全重名(曲线1~N、鱼阵N)但坐标不同,
@@ -589,9 +589,9 @@ public class FlyTurretData : TurretData
_prewarmOrigScale = plane.localScale;
_prewarmOrigActive = plane.gameObject.activeSelf;
// 只开入场要用的 Body+护盾、关掉免费三类——避免把五十来个粒子系统全部初始化(反而更重)
// 只开入场要用的 Body、关掉免费三类——避免把五十来个粒子系统全部初始化(反而更重);
// ⭐ 护盾粒子拆到下一帧再开:和 Body 骨架/粒子挤同一帧 = 单帧尖峰(90% 收尾窗口卡顿的来源之一)
SetPlaneChildActive(plane, "Body", true);
SetPlaneChildActive(plane, "PW_Effect_Defend", true);
SetPlaneChildActive(plane, "FreeEffect", false);
SetPlaneChildActive(plane, "FreeEffect_Crit", false);
SetPlaneChildActive(plane, "FreeEffect_Speedup", false);
@@ -602,8 +602,10 @@ public class FlyTurretData : TurretData
plane.SetParent(holder, true);
plane.localScale = Vector3.zero;
plane.gameObject.SetActive(true);
yield return null;
yield return null; // 让骨架首帧网格、粒子首帧模拟都跑到
yield return null; // Body 骨架首帧网格
SetPlaneChildActive(plane, "PW_Effect_Defend", true); // 护盾粒子单独一帧开
yield return null; // 护盾首帧模拟
yield return null; // 再等一帧让首帧网格上传铺开
FinishPrewarmRestore();
Debug.Log($"[XJMH入场] 飞机预热完成({plane.name})");
@@ -91,6 +91,15 @@ public class AudioResourcesData
/// onProgress:进度回调 0~1(按 LoadAssetsAsync 的 PercentComplete),供进房进度条使用;不传则行为不变。
/// </summary>
public static async Task LoadAudioGame(Action<float> onProgress = null)
{
// ⭐ 资源加载超过 0.1 秒才显示"加载中"界面(引用计数,快速加载不显示)
UIManager.BeginLoading();
try { await LoadAudioGameCore(onProgress); }
finally { UIManager.EndLoading(); }
}
/// <summary>LoadAudioGame 的实际逻辑(外层负责"加载中"界面)</summary>
private static async Task LoadAudioGameCore(Action<float> onProgress)
{
GameType gameType = GameManager.Instance.gameData.currGameType;
var keys = new List<string> { Audio_AALabel, gameType.ToString() };
@@ -92,6 +92,15 @@ public class FishResourcesData
/// 供进房进度条使用;不传则行为与原来一致。
/// </summary>
public static async Task LoadFishAssetsData(Action<float> onProgress = null)
{
// ⭐ 资源加载超过 0.1 秒才显示"加载中"界面(引用计数,快速加载不显示)
UIManager.BeginLoading();
try { await LoadFishAssetsDataCore(onProgress); }
finally { UIManager.EndLoading(); }
}
/// <summary>LoadFishAssetsData 的实际逻辑(外层负责"加载中"界面)</summary>
private static async Task LoadFishAssetsDataCore(Action<float> onProgress)
{
// 清空对象池
Pool.Instance.Clear();
@@ -76,6 +76,15 @@ public class TurretResourcesData
/// (调用方可回退 GetZhanShenPrefab 查全量字典,平滑迁移)。
/// </summary>
public static async Task<GameObject> AcquireZhanShenAsync(int turretNumber, ZhanShenUsage usage)
{
// ⭐ 资源加载超过 0.1 秒才显示"加载中"界面(缓存命中瞬间完成,不会显示)
UIManager.BeginLoading();
try { return await AcquireZhanShenAsyncCore(turretNumber, usage); }
finally { UIManager.EndLoading(); }
}
/// <summary>AcquireZhanShenAsync 的实际逻辑(外层负责"加载中"界面)</summary>
private static async Task<GameObject> AcquireZhanShenAsyncCore(int turretNumber, ZhanShenUsage usage)
{
var key = (turretNumber, usage);
_zsRefCount[key] = _zsRefCount.TryGetValue(key, out int c) ? c + 1 : 1;
@@ -179,6 +188,15 @@ public class TurretResourcesData
/// 与 ReleaseTurretPrefab 配对(切换/关闭时 -1,归零卸包)。
/// </summary>
public static async Task<GameObject> AcquireTurretPrefabAsync(int turretNumber)
{
// ⭐ 资源加载超过 0.1 秒才显示"加载中"界面(缓存命中瞬间完成,不会显示)
UIManager.BeginLoading();
try { return await AcquireTurretPrefabAsyncCore(turretNumber); }
finally { UIManager.EndLoading(); }
}
/// <summary>AcquireTurretPrefabAsync 的实际逻辑(外层负责"加载中"界面)</summary>
private static async Task<GameObject> AcquireTurretPrefabAsyncCore(int turretNumber)
{
_ptRefCount[turretNumber] = _ptRefCount.TryGetValue(turretNumber, out int c) ? c + 1 : 1;
if (_ptPrefabCache.TryGetValue(turretNumber, out var cached)) return cached;
@@ -368,6 +386,15 @@ public class TurretResourcesData
/// 字典中存的就是已销毁对象的引用(Editor 下因 AssetDatabase 模式不会暴露此问题)。
/// </summary>
public static async Task LoadTurretAssetsData()
{
// ⭐ 资源加载超过 0.1 秒才显示"加载中"界面(引用计数,快速加载不显示)
UIManager.BeginLoading();
try { await LoadTurretAssetsDataCore(); }
finally { UIManager.EndLoading(); }
}
/// <summary>LoadTurretAssetsData 的实际逻辑(外层负责"加载中"界面)</summary>
private static async Task LoadTurretAssetsDataCore()
{
turretPrefabDic = new Dictionary<int, GameObject>();
turretGamePrefabDic = new Dictionary<int, GameObject>();