1
This commit is contained in:
@@ -187,32 +187,40 @@ namespace Assets.MyGame.Scripts.Net
|
||||
case GameType.JQQD:
|
||||
break;
|
||||
case GameType.defaultPanel:
|
||||
UIManager.Instance.Get<GameMainPanel_FishBase>(UIPanel.MainGamePanelDefault).currSitData.goldNum = gold;
|
||||
|
||||
UpdateLocalPlayerGold(UIPanel.MainGamePanelDefault, gold);
|
||||
break;
|
||||
case GameType.FLZY:
|
||||
UIManager.Instance.Get<GameMainPanel_FishBase>(UIPanel.MainGamePanelFLZY).currSitData.goldNum = gold;
|
||||
|
||||
UpdateLocalPlayerGold(UIPanel.MainGamePanelFLZY, gold);
|
||||
break;
|
||||
case GameType.YYSC:
|
||||
UIManager.Instance.Get<GameMainPanel_FishBase>(UIPanel.MainGamePanelYYSC).currSitData.goldNum = gold;
|
||||
|
||||
UpdateLocalPlayerGold(UIPanel.MainGamePanelYYSC, gold);
|
||||
break;
|
||||
case GameType.ZGXQ:
|
||||
|
||||
break;
|
||||
case GameType.XJMH:
|
||||
UIManager.Instance.Get<GameMainPanel_FishBase>(UIPanel.MainGamePanelXJMH).currSitData.goldNum = gold;
|
||||
|
||||
UpdateLocalPlayerGold(UIPanel.MainGamePanelXJMH, gold);
|
||||
break;
|
||||
case GameType.HHWK:
|
||||
UIManager.Instance.Get<GameMainPanel_FishBase>(UIPanel.MainGamePanelHHWK).currSitData.goldNum = gold;
|
||||
|
||||
UpdateLocalPlayerGold(UIPanel.MainGamePanelHHWK, gold);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 后端推送 SyncPlayerGold 时同步本地玩家金币(底层值 + UI 显示)。
|
||||
/// 之前只更新 goldNum 不刷新 tMP_GoldNum.text,导致 UI 显示和后端 authoritative 值不同步,
|
||||
/// 后续杀鱼累加基于修正值但 UI 显示旧值,差距越拉越大。
|
||||
/// </summary>
|
||||
private static void UpdateLocalPlayerGold(UIPanel panelType, long gold)
|
||||
{
|
||||
var panel = UIManager.Instance.Get<GameMainPanel_FishBase>(panelType);
|
||||
if (panel == null || panel.currSitData == null) return;
|
||||
panel.currSitData.goldNum = gold;
|
||||
if (panel.currSitData.tMP_GoldNum != null)
|
||||
panel.currSitData.tMP_GoldNum.text = gold.ToString();
|
||||
}
|
||||
public static void GetRoomInfoResult(string msg)
|
||||
{
|
||||
//GameManager.Instance.StartGame();RoomChangeResponse
|
||||
|
||||
@@ -4,6 +4,7 @@ using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using UnityEngine;
|
||||
using UnityEngine.AddressableAssets;
|
||||
using UnityEngine.ResourceManagement.AsyncOperations;
|
||||
using static UnityEngine.AddressableAssets.Addressables;
|
||||
|
||||
[Serializable]
|
||||
@@ -31,6 +32,9 @@ public class TurretResourcesData
|
||||
private static Dictionary<int, GameObject> turretPrefabDic; // id → prefab
|
||||
private static Dictionary<int, Sprite> turretSpriteDic; // id → sprite
|
||||
|
||||
// ---- 保留的 AA Handle(不释放,避免 Build 下资源被卸载)----
|
||||
private static readonly List<AsyncOperationHandle> _loadedHandles = new List<AsyncOperationHandle>();
|
||||
|
||||
static TurretResourcesData()
|
||||
{
|
||||
Init();
|
||||
@@ -93,18 +97,27 @@ public class TurretResourcesData
|
||||
|
||||
/// <summary>
|
||||
/// 加载炮台相关 Addressables 资源(PT + Default 标签交集)。
|
||||
/// 注意:Handle 必须保留,不能 Release,否则 Build 下资源会被立即卸载,
|
||||
/// 字典中存的就是已销毁对象的引用(Editor 下因 AssetDatabase 模式不会暴露此问题)。
|
||||
/// </summary>
|
||||
public static async Task LoadTurretAssetsData()
|
||||
{
|
||||
turretPrefabDic = new Dictionary<int, GameObject>();
|
||||
turretSpriteDic = new Dictionary<int, Sprite>();
|
||||
|
||||
// 清理上一轮残留的 Handle
|
||||
foreach (var h in _loadedHandles)
|
||||
{
|
||||
if (h.IsValid()) Addressables.Release(h);
|
||||
}
|
||||
_loadedHandles.Clear();
|
||||
|
||||
var labels = new List<string> { turret_AALabel, defaultSubLabel };
|
||||
|
||||
Debug.Log("[TurretResourcesData] 开始预下载炮台资源依赖 (PT + Default)...");
|
||||
var depHandle = Addressables.DownloadDependenciesAsync(labels, MergeMode.Intersection);
|
||||
await depHandle.Task;
|
||||
Addressables.Release(depHandle);
|
||||
Addressables.Release(depHandle); // 预下载 Handle 可以立即释放,只影响下载缓存
|
||||
Debug.Log("[TurretResourcesData] 炮台依赖资源预下载完成!");
|
||||
|
||||
// ---- 加载炮台 Prefab ----
|
||||
@@ -118,7 +131,8 @@ public class TurretResourcesData
|
||||
}, MergeMode.Intersection);
|
||||
|
||||
await prefabHandle.Task;
|
||||
Addressables.Release(prefabHandle);
|
||||
// 不释放!保留 Handle 以保持资源存活
|
||||
_loadedHandles.Add(prefabHandle);
|
||||
Debug.Log($"[TurretResourcesData] 炮台 Prefab 加载完成,共 {turretPrefabDic.Count} 个");
|
||||
|
||||
// ---- 加载炮台 Sprite ----
|
||||
@@ -132,7 +146,8 @@ public class TurretResourcesData
|
||||
}, MergeMode.Intersection);
|
||||
|
||||
await spriteHandle.Task;
|
||||
Addressables.Release(spriteHandle);
|
||||
// 不释放!保留 Handle 以保持资源存活
|
||||
_loadedHandles.Add(spriteHandle);
|
||||
Debug.Log($"[TurretResourcesData] 炮台 Sprite 加载完成,共 {turretSpriteDic.Count} 个");
|
||||
|
||||
Debug.Log("[TurretResourcesData] 所有炮台资源加载完毕!");
|
||||
@@ -140,44 +155,25 @@ public class TurretResourcesData
|
||||
|
||||
/// <summary>
|
||||
/// 卸载炮台 Addressables 资源。
|
||||
/// 释放 LoadTurretAssetsData 中保留的所有 Handle。
|
||||
/// </summary>
|
||||
public static async Task UnLoadTurretAssetsData()
|
||||
public static Task UnLoadTurretAssetsData()
|
||||
{
|
||||
var labels = new List<string> { turret_AALabel, defaultSubLabel };
|
||||
|
||||
// 卸载 Prefab
|
||||
var prefabHandle = Addressables.LoadAssetsAsync<GameObject>(labels, null, MergeMode.Intersection);
|
||||
await prefabHandle.Task;
|
||||
if (prefabHandle.Result != null)
|
||||
foreach (var h in _loadedHandles)
|
||||
{
|
||||
foreach (var prefab in prefabHandle.Result)
|
||||
if (h.IsValid())
|
||||
{
|
||||
if (turretPrefabPathDic.TryGetValue(prefab.name, out int id))
|
||||
{
|
||||
if (turretPrefabDic != null && turretPrefabDic.Remove(id))
|
||||
Debug.Log($"[TurretResourcesData] 卸载 Prefab: {prefab.name} (ID={id})");
|
||||
}
|
||||
Addressables.Release(h);
|
||||
Debug.Log($"[TurretResourcesData] 释放 Handle: {h.DebugName}");
|
||||
}
|
||||
}
|
||||
Addressables.Release(prefabHandle);
|
||||
_loadedHandles.Clear();
|
||||
|
||||
// 卸载 Sprite
|
||||
var spriteHandle = Addressables.LoadAssetsAsync<Sprite>(labels, null, MergeMode.Intersection);
|
||||
await spriteHandle.Task;
|
||||
if (spriteHandle.Result != null)
|
||||
{
|
||||
foreach (var sprite in spriteHandle.Result)
|
||||
{
|
||||
if (turretSpritePathDic.TryGetValue(sprite.name, out int id))
|
||||
{
|
||||
if (turretSpriteDic != null && turretSpriteDic.Remove(id))
|
||||
Debug.Log($"[TurretResourcesData] 卸载 Sprite: {sprite.name} (ID={id})");
|
||||
}
|
||||
}
|
||||
}
|
||||
Addressables.Release(spriteHandle);
|
||||
turretPrefabDic?.Clear();
|
||||
turretSpriteDic?.Clear();
|
||||
|
||||
Debug.Log($"[TurretResourcesData] 卸载完成,剩余 Prefab: {turretPrefabDic?.Count ?? 0}, Sprite: {turretSpriteDic?.Count ?? 0}");
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
// ==================== 查询接口 ====================
|
||||
|
||||
Reference in New Issue
Block a user