From 7f0b9e4e1a567fa5a0f8c82cb8fef4228b7ced96 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=A3=AE2003?= <2384017988@qq.com>
Date: Sat, 25 Jul 2026 16:13:21 +0800
Subject: [PATCH] 1
---
Assets/Framework/Tool/BeijingTimeManager.cs | 45 ++++++++-----------
.../Characters/Monster/MonsterContral.cs | 19 ++++----
Assets/MyGame/Scripts/Manager/GameManager.cs | 3 ++
.../aa/UI/Game/GameMainPanel_FishBase.cs | 3 +-
4 files changed, 34 insertions(+), 36 deletions(-)
diff --git a/Assets/Framework/Tool/BeijingTimeManager.cs b/Assets/Framework/Tool/BeijingTimeManager.cs
index 487221674..8597da0d9 100644
--- a/Assets/Framework/Tool/BeijingTimeManager.cs
+++ b/Assets/Framework/Tool/BeijingTimeManager.cs
@@ -1,18 +1,17 @@
-using System;
+using System;
using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
using Newtonsoft.Json.Linq;
///
-/// 北京时间管理器 - 获取一次后持续自增
+/// 北京时间管理器 - 同步时记录服务器时间与本地系统时间的差值,获取时返回本地时间+差值
///
public class BeijingTimeManager : MonoSingleton
{
[Header("时间状态")]
[SerializeField] private bool _isTimeSynced = false;
- [SerializeField] private DateTime _currentBeijingTime;
- [SerializeField] private float _timeSinceLastSync;
+ [SerializeField] private TimeSpan _serverTimeOffset; // 服务器时间 - 本地系统时间
///
/// 获取当前北京时间
@@ -23,7 +22,7 @@ public class BeijingTimeManager : MonoSingleton
{
if (_isTimeSynced)
{
- return _currentBeijingTime.AddSeconds(_timeSinceLastSync);
+ return DateTime.Now + _serverTimeOffset;
}
return DateTime.Now; // 未同步时返回本地时间
}
@@ -63,14 +62,6 @@ public class BeijingTimeManager : MonoSingleton
SyncBeijingTime();
}
- private void Update()
- {
- if (_isTimeSynced)
- {
- _timeSinceLastSync += Time.deltaTime;
- }
- }
-
///
/// 同步北京时间
///
@@ -112,16 +103,16 @@ public class BeijingTimeManager : MonoSingleton
if (url.Contains("timeapi.io"))
{
-
+
string timeStr = json["dateTime"]?.ToString();
Debug.Log(timeStr);
if (!string.IsNullOrEmpty(timeStr))
{
- _currentBeijingTime = DateTime.Parse(timeStr);
- _timeSinceLastSync = 0;
+ DateTime serverTime = DateTime.Parse(timeStr);
+ _serverTimeOffset = serverTime - DateTime.Now;
_isTimeSynced = true;
- Debug.Log($"北京时间同步成功:{_currentBeijingTime:yyyy-MM-dd HH:mm:ss}");
- OnTimeSynced?.Invoke(_currentBeijingTime);
+ Debug.Log($"北京时间同步成功:{CurrentBeijingTime:yyyy-MM-dd HH:mm:ss},偏移量:{_serverTimeOffset.TotalSeconds:F1}s");
+ OnTimeSynced?.Invoke(CurrentBeijingTime);
yield break;
}
}
@@ -133,13 +124,13 @@ public class BeijingTimeManager : MonoSingleton
if (!string.IsNullOrEmpty(timeStr))
{
- _currentBeijingTime = DateTimeOffset.Parse(timeStr)
+ DateTime serverTime = DateTimeOffset.Parse(timeStr)
.ToOffset(TimeSpan.FromHours(8))
.DateTime;
- _timeSinceLastSync = 0;
+ _serverTimeOffset = serverTime - DateTime.Now;
_isTimeSynced = true;
- Debug.Log($"北京时间同步成功:{_currentBeijingTime:yyyy-MM-dd HH:mm:ss}");
- OnTimeSynced?.Invoke(_currentBeijingTime);
+ Debug.Log($"北京时间同步成功:{CurrentBeijingTime:yyyy-MM-dd HH:mm:ss},偏移量:{_serverTimeOffset.TotalSeconds:F1}s");
+ OnTimeSynced?.Invoke(CurrentBeijingTime);
yield break;
}
}
@@ -150,11 +141,11 @@ public class BeijingTimeManager : MonoSingleton
if (!string.IsNullOrEmpty(timeStr))
{
- _currentBeijingTime = DateTime.ParseExact(timeStr, "yyyy-MM-dd HH:mm:ss", null);
- _timeSinceLastSync = 0;
+ DateTime serverTime = DateTime.ParseExact(timeStr, "yyyy-MM-dd HH:mm:ss", null);
+ _serverTimeOffset = serverTime - DateTime.Now;
_isTimeSynced = true;
- Debug.Log($"北京时间同步成功:{_currentBeijingTime:yyyy-MM-dd HH:mm:ss}");
- OnTimeSynced?.Invoke(_currentBeijingTime);
+ Debug.Log($"北京时间同步成功:{CurrentBeijingTime:yyyy-MM-dd HH:mm:ss},偏移量:{_serverTimeOffset.TotalSeconds:F1}s");
+ OnTimeSynced?.Invoke(CurrentBeijingTime);
yield break;
}
}
@@ -169,7 +160,7 @@ public class BeijingTimeManager : MonoSingleton
}
Debug.LogError("所有时间服务器都失败了,使用本地时间");
- _currentBeijingTime = DateTime.Now;
+ _serverTimeOffset = TimeSpan.Zero;
_isTimeSynced = false;
}
diff --git a/Assets/MyGame/Scripts/Characters/Monster/MonsterContral.cs b/Assets/MyGame/Scripts/Characters/Monster/MonsterContral.cs
index a27db58fc..d259107b5 100644
--- a/Assets/MyGame/Scripts/Characters/Monster/MonsterContral.cs
+++ b/Assets/MyGame/Scripts/Characters/Monster/MonsterContral.cs
@@ -140,11 +140,11 @@ public class MonsterContral : MonoBehaviour
// ================================================================
// Unity 生命周期
// ================================================================
-
+ public bool baseMmove;
public virtual void Awake()
{
LoadHitEffect();
-
+ baseMmove = isMove;
}
public async void LoadHitEffect()
{
@@ -158,11 +158,14 @@ public class MonsterContral : MonoBehaviour
}
public virtual void OnEnable()
{
- // ⭐ 重置 isMove=true:池回收的鱼重新生成时,必须恢复移动状态。
- // 之前被注释掉导致:冰冻时 FreezeAllFish 设 isMove=false → 鱼被回收 →
- // 重新生成后 isMove 残留 false → 鱼永远不动(一直在中间不会游动)。
- // 冰冻中重新激活的鱼,FreezeAllFish 会立即覆盖为 false,安全。
- isMove = true;
+ // ⭐ 用 baseMmove 恢复 isMove:Awake 时记录预制体原始 isMove 状态。
+ // - 普通鱼预制体 isMove=true → 池回收后恢复 true,正常游动
+ // (之前被注释导致:冰冻时 FreezeAllFish 设 isMove=false → 鱼回收 →
+ // 重新生成后残留 false → 鱼永远不动)
+ // - 爆奖 Boss 预制体 isMove=false → 恢复 false,固定在 (0,0,0) 播放动画
+ // (金龙/雷龙/玉龙等不走路径,直到爆奖结束销毁)
+ // - 冰冻中重新激活的鱼,末尾会覆盖为 false,安全
+ isMove = baseMmove;
fishenum = (FishTypeEnum)monsterData.fishTypeConfig.fishType;
uirootRect = UIManager.Instance.uiRoot.GetComponent();
mainCamera = Camera.main;
@@ -170,7 +173,7 @@ public class MonsterContral : MonoBehaviour
InitAnimList();
ChangeState(CharacterStateType.move);
- // ⭐ 同步冰冻特效状态:池回收的鱼 bingDongEffect 可能残留激活状态,
+ // ⭐ 同步冰冻特效状态:池回收的鱼 bingDongEffect 可能残留激活状态,
// 重新生成时会显示白色冰冻蒙皮。根据当前是否冰冻中决定显隐
bool frozen = CreateFishManager.Instance != null && CreateFishManager.Instance.isFrozen;
SetFreezeEffect(frozen);
diff --git a/Assets/MyGame/Scripts/Manager/GameManager.cs b/Assets/MyGame/Scripts/Manager/GameManager.cs
index 134071f79..03d7d04f6 100644
--- a/Assets/MyGame/Scripts/Manager/GameManager.cs
+++ b/Assets/MyGame/Scripts/Manager/GameManager.cs
@@ -204,6 +204,9 @@ public class GameManager : MonoSingleton
_ => 60
};
+ // ⭐ 防止手机屏幕自动黑屏休眠
+ Screen.sleepTimeout = SleepTimeout.NeverSleep;
+
AudioResourcesData audioResourcesData = new AudioResourcesData();
InItLoad();
//TurretResourcesData turretResourcesData = new TurretResourcesData();
diff --git a/Assets/MyGame/aa/UI/Game/GameMainPanel_FishBase.cs b/Assets/MyGame/aa/UI/Game/GameMainPanel_FishBase.cs
index c4cf7d54a..1d41fc8f5 100644
--- a/Assets/MyGame/aa/UI/Game/GameMainPanel_FishBase.cs
+++ b/Assets/MyGame/aa/UI/Game/GameMainPanel_FishBase.cs
@@ -1509,7 +1509,8 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
CrossPlatformInput input = GetInput();
if (!toggle_Lock.isOn) return;
- if (!input.wasPressedThisFrame && !input.wasReleasedThisFrame) return;
+ //if (!input.wasPressedThisFrame && !input.wasReleasedThisFrame) return;
+ if (!input.wasPressedThisFrame) return;
if (IsPointerOverUI(input.position)) return;
// 射线从相机出发,指向鼠标点击点