From b8d546a374a181acd8a83ff1fc4d207bf6802899 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A3=AE2003?= <2384017988@qq.com> Date: Thu, 8 Oct 2026 04:09:31 +0800 Subject: [PATCH] 1 --- .../Scripts/Net/WebSocketReponseList.cs | 4 ++ .../UI/DefaultPanel/GuaGuaLe/GuaGuaLeGPU.cs | 47 +++++++++++++++---- 2 files changed, 43 insertions(+), 8 deletions(-) diff --git a/Assets/MyGame/Scripts/Net/WebSocketReponseList.cs b/Assets/MyGame/Scripts/Net/WebSocketReponseList.cs index cc5965861..42888929b 100644 --- a/Assets/MyGame/Scripts/Net/WebSocketReponseList.cs +++ b/Assets/MyGame/Scripts/Net/WebSocketReponseList.cs @@ -735,6 +735,8 @@ namespace Assets.MyGame.Scripts.Net public static void AssetUpdated(string msg) { var data = JsonConvert.DeserializeObject>(msg).arguments[0]; + // 刮刮卡面板打开期间挂起推送刷新:金币/钻石/道具统一在点击"领取"按钮时刷新 + if (GuaGuaLeGPU.SuspendWsRefresh) return; // 触发用户数据刷新 var userId = GameManager.Instance?.user?.id; if (!string.IsNullOrEmpty(userId)) @@ -747,6 +749,8 @@ namespace Assets.MyGame.Scripts.Net public static void BackpackUpdated(string msg) { var data = JsonConvert.DeserializeObject>(msg).arguments[0]; + // 刮刮卡面板打开期间挂起推送刷新:金币/钻石/道具统一在点击"领取"按钮时刷新 + if (GuaGuaLeGPU.SuspendWsRefresh) return; // 刷新用户数据(道具列表在 GetUser 返回中) var userId = GameManager.Instance?.user?.id; if (!string.IsNullOrEmpty(userId)) diff --git a/Assets/MyGame/aa/UI/DefaultPanel/GuaGuaLe/GuaGuaLeGPU.cs b/Assets/MyGame/aa/UI/DefaultPanel/GuaGuaLe/GuaGuaLeGPU.cs index fd3d70141..7050fc3ef 100644 --- a/Assets/MyGame/aa/UI/DefaultPanel/GuaGuaLe/GuaGuaLeGPU.cs +++ b/Assets/MyGame/aa/UI/DefaultPanel/GuaGuaLe/GuaGuaLeGPU.cs @@ -56,9 +56,39 @@ public class GuaGuaLeGPU : SubUIBase, IPointerDownHandler, IDragHandler private Texture2D progressReadTex; private int dragCount; + /// + /// 刮刮卡面板打开期间,挂起 WebSocket 推送(AssetUpdated/BackpackUpdated)触发的用户数据刷新, + /// 统一在点击"领取"按钮时才刷新用户数据(加金币/钻石/道具)。 + /// + public static bool SuspendWsRefresh; + + public override void Awake() + { + base.Awake(); + // 领取按钮:刮完后最后一步点击领取时,才刷新用户数据(金币/钻石/道具/刮刮卡数量) + if (btn_Get != null) + btn_Get.onClick.AddListener(OnGetClick); + } + + private void OnGetClick() + { + SuspendWsRefresh = false; + string userId = GameManager.Instance?.user?.id; + if (!string.IsNullOrEmpty(userId)) + APIRequestList.GetUser(userId, a => GameManager.Instance.UpdataUserData(a)); + } + + public override void Hide() + { + SuspendWsRefresh = false; + base.Hide(); + } + protected override void OnShow(object args = null) { base.OnShow(args); + // 打开面板即挂起 WebSocket 推送刷新,数据统一在点击"领取"时更新 + SuspendWsRefresh = true; ResetCard(); } @@ -93,7 +123,8 @@ public class GuaGuaLeGPU : SubUIBase, IPointerDownHandler, IDragHandler progressReadTex = new Texture2D(rtWidth, rtHeight, TextureFormat.ARGB32, false); ResetState(); - // 不在打开时抽奖:刮刮卡在刮开(RevealAll)时才消耗并更新数据 + // 打开时即抽奖出结果:提前创建奖品显示(涂层下面),加数据统一在最后点击"领取"按钮时进行 + FetchAward(); } private void ResetState() @@ -137,10 +168,7 @@ public class GuaGuaLeGPU : SubUIBase, IPointerDownHandler, IDragHandler break; } - // 抽奖完成后刷新用户数据(金币/钻石/刮刮卡数量变化) - string userId = GameManager.Instance?.user?.id; - if (!string.IsNullOrEmpty(userId)) - APIRequestList.GetUser(userId, a => GameManager.Instance.UpdataUserData(a)); + // 不在此处刷新用户数据:加金币/钻石/道具统一在最后点击"领取"按钮时进行 }); } @@ -158,6 +186,9 @@ public class GuaGuaLeGPU : SubUIBase, IPointerDownHandler, IDragHandler if (instanceMaskMat != null) instanceMaskMat.SetColor("_CoatColor", coatColor); + + // 重置后重新抽奖:提前创建新的奖品显示 + FetchAward(); } public void RevealAll() @@ -169,9 +200,7 @@ public class GuaGuaLeGPU : SubUIBase, IPointerDownHandler, IDragHandler ClearRT(maskRT, Color.black); - // 刮完后才抽奖:消耗刮刮卡,并在抽奖回调中刷新金币/钻石/卡片数量 - FetchAward(); - + // 刮开揭示时不刷新用户数据:加金币/钻石/道具统一在最后点击"领取"按钮时进行 onRevealed?.Invoke(); } @@ -309,6 +338,8 @@ public class GuaGuaLeGPU : SubUIBase, IPointerDownHandler, IDragHandler private void OnDestroy() { + // 面板销毁时恢复 WebSocket 推送刷新,避免影响其他功能 + SuspendWsRefresh = false; if (maskRT != null) { maskRT.Release(); Destroy(maskRT); } if (instanceMaskMat != null) Destroy(instanceMaskMat); if (instanceEraseMat != null) Destroy(instanceEraseMat);