From 1dd4f6b0503ae153eee2d23dcf2c696c989f45d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A3=AE2003?= <2384017988@qq.com> Date: Thu, 2 Jul 2026 19:09:00 +0800 Subject: [PATCH] 1 --- .../Scripts/Net/WebSocketReponseList.cs | 3 ++ Assets/MyGame/Scripts/Turret/SitPosData.cs | 4 ++ .../aa/UI/Game/GameMainPanel_FishBase.cs | 49 ++++++++----------- 3 files changed, 28 insertions(+), 28 deletions(-) diff --git a/Assets/MyGame/Scripts/Net/WebSocketReponseList.cs b/Assets/MyGame/Scripts/Net/WebSocketReponseList.cs index a7113c402..021d41d85 100644 --- a/Assets/MyGame/Scripts/Net/WebSocketReponseList.cs +++ b/Assets/MyGame/Scripts/Net/WebSocketReponseList.cs @@ -128,6 +128,9 @@ namespace Assets.MyGame.Scripts.Net targetSit.ShowWaiting(); } fishPanel.JoinGame(notice.position, notice.gold, notice.diamond, notice.cannonMultiple, 0, notice.userId, notice.cannonId, notice.wingsId); + // 后端动态加入的机器人也要标记 + if (targetSit != null && !string.IsNullOrEmpty(notice.userId) && notice.userId.StartsWith("bot_")) + targetSit.isBot = true; } } } diff --git a/Assets/MyGame/Scripts/Turret/SitPosData.cs b/Assets/MyGame/Scripts/Turret/SitPosData.cs index 367fe30b8..4012c825d 100644 --- a/Assets/MyGame/Scripts/Turret/SitPosData.cs +++ b/Assets/MyGame/Scripts/Turret/SitPosData.cs @@ -126,6 +126,10 @@ public class SitPosData : MonoBehaviour if (wingUsing != null && int.TryParse(wingUsing.number, out int wingNum)) LoadWing(wingNum); } + + // 非人机玩家加入时,自动分配为首个房主 + if (!isBot) + AssignRoomOwner(this); } /// diff --git a/Assets/MyGame/aa/UI/Game/GameMainPanel_FishBase.cs b/Assets/MyGame/aa/UI/Game/GameMainPanel_FishBase.cs index 14dc8f635..823f88149 100644 --- a/Assets/MyGame/aa/UI/Game/GameMainPanel_FishBase.cs +++ b/Assets/MyGame/aa/UI/Game/GameMainPanel_FishBase.cs @@ -197,30 +197,10 @@ public class GameMainPanel_FishBase : GameMainPanel_Base foreach (var item in GameManager.Instance.gameData.currRoomData.players) { JoinGame(item.position, item.gold, item.diamond, item.cannonMultiple, 0, item.userId, item.cannonId, item.wingsId); - } - // 生成人机:倒着填空余座位 - int botCount = GameManager.Instance.gameData.currRoomData.robotCount; - if (botCount > 0 && GameManager.Instance.enableBot) - { - var usedPositions = new HashSet(); - foreach (var p in GameManager.Instance.gameData.currRoomData.players) - usedPositions.Add(p.position); - // 第一个普通炮台的编号作为默认 - int defaultTurret = 1; - var turretList = TurretResourcesData.GetTurretDataByType(1); - if (turretList != null && turretList.Count > 0) - defaultTurret = turretList[0].turretNumber; - int botGold = 100000; - int botDiamond = 500; - int botMultiple = paoBeiList != null && paoBeiList.Count > 0 ? paoBeiList[0] : 100; - for (int pos = list_Sits.Count - 1; pos >= 0 && botCount > 0; pos--) - { - if (usedPositions.Contains(pos)) continue; - JoinGame(pos, botGold, botDiamond, botMultiple, 0, "bot_" + pos, defaultTurret.ToString()); - var botSit = list_Sits[pos]; - if (botSit != null) botSit.isBot = true; - botCount--; - } + // 后端 players 列表里 userId 以 "bot_" 开头的是机器人 + var sit = list_Sits.Find(s => s.posID == item.position); + if (sit != null && !string.IsNullOrEmpty(item.userId) && item.userId.StartsWith("bot_")) + sit.isBot = true; } GameManager.Instance.gameData.roomJoinNotice = v.arguments[0]; isfirstShow = false; @@ -1932,10 +1912,8 @@ public class GameMainPanel_FishBase : GameMainPanel_Base } if (target == null) continue; - // 旋转朝向鱼 - Vector3 fishWorldPos = target.transform.position; - Vector3 screenPos = Camera.main.WorldToScreenPoint(fishWorldPos); - RotateToTouch(sit, screenPos); + // 旋转朝向鱼(仅本地旋转,不广播 SyncRotate) + RotateBotToTarget(sit, target.transform.position); // 定时开火 if (!botFireTimer.ContainsKey(sit.posID)) @@ -1959,6 +1937,21 @@ public class GameMainPanel_FishBase : GameMainPanel_Base } } + /// 人机炮台旋转:直接用世界坐标算角度,仅本地旋转,不广播 + private void RotateBotToTarget(SitPosData sit, Vector3 fishWorldPos) + { + Vector3 turretWorldPos = sit.tra_CurrTurret.position; + Vector2 dir = (Vector2)(fishWorldPos - turretWorldPos); + if (dir.sqrMagnitude < 1f) return; + + float angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg - 90f; + + // 上方座位(2,3)炮台默认朝上,加180°让它朝下打鱼 + if (sit.IsFlipped) angle = (angle + 180f) % 360f; + + sit.SetRotation(angle); + } + /// 人机开火同步(房主代发) private void SyncFire_ForBot(SitPosData botSit, float angle) {