Merge remote-tracking branch 'origin/feature/NewWork1' into feature/NewWork1

This commit is contained in:
yingtao-code
2026-07-25 00:21:31 +08:00
12 changed files with 320 additions and 108 deletions
@@ -86,3 +86,16 @@ Material:
- _SpecCor: {r: 1, g: 1, b: 1, a: 0.45490196} - _SpecCor: {r: 1, g: 1, b: 1, a: 0.45490196}
- _WaveColor: {r: 1, g: 1, b: 1, a: 1} - _WaveColor: {r: 1, g: 1, b: 1, a: 1}
m_BuildTextureStacks: [] m_BuildTextureStacks: []
--- !u!114 &1034597170340571397
MonoBehaviour:
m_ObjectHideFlags: 11
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
m_Name:
m_EditorClassIdentifier:
version: 7
@@ -86,3 +86,16 @@ Material:
- _SpecCor: {r: 1, g: 1, b: 1, a: 1} - _SpecCor: {r: 1, g: 1, b: 1, a: 1}
- _WaveColor: {r: 1, g: 1, b: 1, a: 1} - _WaveColor: {r: 1, g: 1, b: 1, a: 1}
m_BuildTextureStacks: [] m_BuildTextureStacks: []
--- !u!114 &1391895582203003865
MonoBehaviour:
m_ObjectHideFlags: 11
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
m_Name:
m_EditorClassIdentifier:
version: 7
@@ -158,13 +158,28 @@ public class MonsterContral : MonoBehaviour
} }
public virtual void OnEnable() public virtual void OnEnable()
{ {
//isMove = true; // ⭐ 重置 isMove=true:池回收的鱼重新生成时,必须恢复移动状态。
// 之前被注释掉导致:冰冻时 FreezeAllFish 设 isMove=false → 鱼被回收 →
// 重新生成后 isMove 残留 false → 鱼永远不动(一直在中间不会游动)。
// 冰冻中重新激活的鱼,FreezeAllFish 会立即覆盖为 false,安全。
isMove = true;
fishenum = (FishTypeEnum)monsterData.fishTypeConfig.fishType; fishenum = (FishTypeEnum)monsterData.fishTypeConfig.fishType;
uirootRect = UIManager.Instance.uiRoot.GetComponent<RectTransform>(); uirootRect = UIManager.Instance.uiRoot.GetComponent<RectTransform>();
mainCamera = Camera.main; mainCamera = Camera.main;
moveTime = 0f; moveTime = 0f;
InitAnimList(); InitAnimList();
ChangeState(CharacterStateType.move); ChangeState(CharacterStateType.move);
// ⭐ 同步冰冻特效状态:池回收的鱼 bingDongEffect 可能残留激活状态,
// 重新生成时会显示白色冰冻蒙皮。根据当前是否冰冻中决定显隐
bool frozen = CreateFishManager.Instance != null && CreateFishManager.Instance.isFrozen;
SetFreezeEffect(frozen);
if (frozen)
{
// 冰冻中重新生成的鱼也要被冻结
isMove = false;
ChangeState(CharacterStateType.idle);
}
} }
private void Update() private void Update()
@@ -654,10 +654,10 @@ public class CreateFishManager : MonoSingleton<CreateFishManager>
return; return;
foreach (var item in bossList) foreach (var item in bossList)
{ {
if (item.fishNumber == "11030") if (item.fishNumber == "11026")
item.isCreate = 2; item.isCreate = 2;
if (item.fishNumber == "11027") if (item.fishNumber == "11035")
item.isCreate = 2; item.isCreate = 2;
// if (item.fishNumber == "11030") // if (item.fishNumber == "11030")
// item.isCreate = 2; // item.isCreate = 2;
@@ -2096,7 +2096,10 @@ public class CreateFishManager : MonoSingleton<CreateFishManager>
public void FreezeAllFish() public void FreezeAllFish()
{ {
isFrozen = true; isFrozen = true;
// ⭐ 两个字典必须同步清空,否则 frozenFishIsMoves 残留旧数据
// 会导致下次解冻时用旧值覆盖 isMove 但不恢复 currState
frozenFishStates.Clear(); frozenFishStates.Clear();
frozenFishIsMoves.Clear();
// 只遍历全量字典 fishDatas_hashCodekey(已包含所有鱼),不重复遍历子字典 // 只遍历全量字典 fishDatas_hashCodekey(已包含所有鱼),不重复遍历子字典
if (fishDatas_hashCodekey != null) if (fishDatas_hashCodekey != null)
@@ -2131,16 +2134,25 @@ public class CreateFishManager : MonoSingleton<CreateFishManager>
MonsterContral m = kv.Value; MonsterContral m = kv.Value;
if (m == null || !m.gameObject.activeInHierarchy) continue; if (m == null || !m.gameObject.activeInHierarchy) continue;
// ⭐ 只恢复本次冰冻记录的鱼(frozenFishStates 有记录才恢复)
// 避免用 frozenFishIsMoves 的旧数据覆盖未冻结鱼的 isMove
if (!frozenFishStates.TryGetValue(m.guid, out var prevState))
continue;
// 恢复冰冻前的 isMove 和 currState
if (frozenFishIsMoves.TryGetValue(m.guid, out var prevIsMove)) if (frozenFishIsMoves.TryGetValue(m.guid, out var prevIsMove))
m.isMove = prevIsMove; m.isMove = prevIsMove;
else
m.isMove = true; // 兜底:没记录就恢复为可移动
m.SetFreezeEffect(false); m.SetFreezeEffect(false);
if (frozenFishStates.TryGetValue(m.guid, out var prevState)) m.ChangeState(prevState);
m.ChangeState(prevState);
} }
} }
// ⭐ 两个字典同步清空
frozenFishStates.Clear(); frozenFishStates.Clear();
frozenFishIsMoves.Clear();
} }
#endregion #endregion
} }
@@ -566,7 +566,13 @@ namespace Assets.MyGame.Scripts.Net
// 只处理当前登录用户被顶的情况 // 只处理当前登录用户被顶的情况
if (data != null && !string.IsNullOrEmpty(data.userId) if (data != null && !string.IsNullOrEmpty(data.userId)
&& !string.IsNullOrEmpty(userId) && data.userId != userId) && !string.IsNullOrEmpty(userId) && data.userId != userId)
return; {
UIManager.Instance.ShowTiShi("账号已在其他地方登录", () =>
{
GameManager.Instance.Logout();
return;
});
}
} }
catch (Exception e) catch (Exception e)
{ {
+21 -4
View File
@@ -310,7 +310,7 @@ PrefabInstance:
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 1697762167430256, guid: 53fb934139b912d4eb7fc7e42ae84334, type: 3} - target: {fileID: 1697762167430256, guid: 53fb934139b912d4eb7fc7e42ae84334, type: 3}
propertyPath: m_IsActive propertyPath: m_IsActive
value: 0 value: 1
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 1697762167430256, guid: 53fb934139b912d4eb7fc7e42ae84334, type: 3} - target: {fileID: 1697762167430256, guid: 53fb934139b912d4eb7fc7e42ae84334, type: 3}
propertyPath: m_TagString propertyPath: m_TagString
@@ -958,15 +958,15 @@ PrefabInstance:
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 4707758849810793, guid: 53fb934139b912d4eb7fc7e42ae84334, type: 3} - target: {fileID: 4707758849810793, guid: 53fb934139b912d4eb7fc7e42ae84334, type: 3}
propertyPath: m_LocalScale.x propertyPath: m_LocalScale.x
value: 30 value: 25
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 4707758849810793, guid: 53fb934139b912d4eb7fc7e42ae84334, type: 3} - target: {fileID: 4707758849810793, guid: 53fb934139b912d4eb7fc7e42ae84334, type: 3}
propertyPath: m_LocalScale.y propertyPath: m_LocalScale.y
value: 30 value: 25
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 4707758849810793, guid: 53fb934139b912d4eb7fc7e42ae84334, type: 3} - target: {fileID: 4707758849810793, guid: 53fb934139b912d4eb7fc7e42ae84334, type: 3}
propertyPath: m_LocalScale.z propertyPath: m_LocalScale.z
value: 30 value: 25
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 4707758849810793, guid: 53fb934139b912d4eb7fc7e42ae84334, type: 3} - target: {fileID: 4707758849810793, guid: 53fb934139b912d4eb7fc7e42ae84334, type: 3}
propertyPath: m_LocalPosition.x propertyPath: m_LocalPosition.x
@@ -1767,16 +1767,28 @@ MonoBehaviour:
m_EditorClassIdentifier: m_EditorClassIdentifier:
beilv: 0 beilv: 0
guid: guid:
lastMoveLineId:
monsterData: monsterData:
die_Score: 0 die_Score: 0
isDie: 0 isDie: 0
fishTypeConfig: fishTypeConfig:
fishNumber: fishNumber:
fishName: fishName:
fishBrief:
fishType: 0 fishType: 0
fishScore: 0 fishScore: 0
killWeight: 0 killWeight: 0
pathList: pathList:
fishImage:
fishMultipleDesc:
moveLine:
bezierCurveData:
name:
start: {x: 0, y: 0}
controlPoints: []
end: {x: 0, y: 0}
moveTime: 0
moveSpeed: 0
skeleton: {fileID: 0} skeleton: {fileID: 0}
isSpine: 1 isSpine: 1
fishTypeID: 11026 fishTypeID: 11026
@@ -1795,8 +1807,10 @@ MonoBehaviour:
yzID: yzID:
colliderList: [] colliderList: []
lockPoint: {fileID: 3118873771312464526} lockPoint: {fileID: 3118873771312464526}
bingDongEffect: {fileID: 0}
rotationPY: 60 rotationPY: 60
isRotate: 0 isRotate: 0
isNot1: 0
ischild0: 1 ischild0: 1
depthOffset: 250 depthOffset: 250
bossName: "\u805A\u5B9D\u76C6" bossName: "\u805A\u5B9D\u76C6"
@@ -1810,6 +1824,8 @@ MonoBehaviour:
isDieFish: 0 isDieFish: 0
dieTime: 3 dieTime: 3
v3: {x: 0, y: 0, z: 0} v3: {x: 0, y: 0, z: 0}
isLocalCoin: 0
killerSitPos: -1
idleAnim: {fileID: 3084212258959664462} idleAnim: {fileID: 3084212258959664462}
effect1: {fileID: 7917591688779815920} effect1: {fileID: 7917591688779815920}
effect2: {fileID: 8659896028027952469} effect2: {fileID: 8659896028027952469}
@@ -1852,6 +1868,7 @@ MonoBehaviour:
coinFlyDuration: 0.5 coinFlyDuration: 0.5
coinArrivalInterval: 0.1 coinArrivalInterval: 0.1
isSelf: 0 isSelf: 0
autoFinishOnScoreFull: 1
totalBJCount: 0 totalBJCount: 0
currBJCount: 0 currBJCount: 0
isEffEnd: 0 isEffEnd: 0
@@ -930,7 +930,7 @@ PrefabInstance:
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 1361653457580592, guid: 055ba0a273a3d0c48a43f4fb3f92dc4d, type: 3} - target: {fileID: 1361653457580592, guid: 055ba0a273a3d0c48a43f4fb3f92dc4d, type: 3}
propertyPath: m_IsActive propertyPath: m_IsActive
value: 1 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 1361653457580592, guid: 055ba0a273a3d0c48a43f4fb3f92dc4d, type: 3} - target: {fileID: 1361653457580592, guid: 055ba0a273a3d0c48a43f4fb3f92dc4d, type: 3}
propertyPath: m_TagString propertyPath: m_TagString
@@ -7283,9 +7283,9 @@ Animator:
type: 3} type: 3}
m_PrefabInstance: {fileID: 7185978563645214470} m_PrefabInstance: {fileID: 7185978563645214470}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
--- !u!4 &7185125104697894038 stripped --- !u!4 &7181217104733412390 stripped
Transform: Transform:
m_CorrespondingSourceObject: {fileID: 4231301349993360, guid: 055ba0a273a3d0c48a43f4fb3f92dc4d, m_CorrespondingSourceObject: {fileID: 4916496161379104, guid: 055ba0a273a3d0c48a43f4fb3f92dc4d,
type: 3} type: 3}
m_PrefabInstance: {fileID: 7185978563645214470} m_PrefabInstance: {fileID: 7185978563645214470}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
@@ -7348,7 +7348,7 @@ MonoBehaviour:
isyz: 0 isyz: 0
yzID: yzID:
colliderList: [] colliderList: []
lockPoint: {fileID: 7185125104697894038} lockPoint: {fileID: 7181217104733412390}
bingDongEffect: {fileID: 0} bingDongEffect: {fileID: 0}
rotationPY: 60 rotationPY: 60
isRotate: 0 isRotate: 0
@@ -7425,12 +7425,6 @@ Transform:
type: 3} type: 3}
m_PrefabInstance: {fileID: 98071442387624804} m_PrefabInstance: {fileID: 98071442387624804}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
--- !u!4 &93793445555571887 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 4877232833458123, guid: d82e692e41cc85e4e86f6899f58f771d,
type: 3}
m_PrefabInstance: {fileID: 98071442387624804}
m_PrefabAsset: {fileID: 0}
--- !u!4 &93946421411710175 stripped --- !u!4 &93946421411710175 stripped
Transform: Transform:
m_CorrespondingSourceObject: {fileID: 4970551864321979, guid: d82e692e41cc85e4e86f6899f58f771d, m_CorrespondingSourceObject: {fileID: 4970551864321979, guid: d82e692e41cc85e4e86f6899f58f771d,
@@ -7543,7 +7537,7 @@ MonoBehaviour:
- {fileID: 93594333527686029} - {fileID: 93594333527686029}
- {fileID: 93477760682605764} - {fileID: 93477760682605764}
- {fileID: 95139269106097999} - {fileID: 95139269106097999}
lockPoint: {fileID: 93793445555571887} lockPoint: {fileID: 95425877480302237}
bingDongEffect: {fileID: 0} bingDongEffect: {fileID: 0}
rotationPY: 60 rotationPY: 60
isRotate: 0 isRotate: 0
@@ -444,7 +444,7 @@ PrefabInstance:
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 1180172148385199, guid: 24f1136b5772c7a428221f9ea1e47092, type: 3} - target: {fileID: 1180172148385199, guid: 24f1136b5772c7a428221f9ea1e47092, type: 3}
propertyPath: m_IsActive propertyPath: m_IsActive
value: 0 value: 1
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 1180172148385199, guid: 24f1136b5772c7a428221f9ea1e47092, type: 3} - target: {fileID: 1180172148385199, guid: 24f1136b5772c7a428221f9ea1e47092, type: 3}
propertyPath: m_TagString propertyPath: m_TagString
@@ -468,7 +468,7 @@ PrefabInstance:
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 4652413757758945, guid: 24f1136b5772c7a428221f9ea1e47092, type: 3} - target: {fileID: 4652413757758945, guid: 24f1136b5772c7a428221f9ea1e47092, type: 3}
propertyPath: m_LocalPosition.y propertyPath: m_LocalPosition.y
value: 0 value: -13
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 4652413757758945, guid: 24f1136b5772c7a428221f9ea1e47092, type: 3} - target: {fileID: 4652413757758945, guid: 24f1136b5772c7a428221f9ea1e47092, type: 3}
propertyPath: m_LocalPosition.z propertyPath: m_LocalPosition.z
@@ -551,16 +551,28 @@ MonoBehaviour:
m_EditorClassIdentifier: m_EditorClassIdentifier:
beilv: 0 beilv: 0
guid: guid:
lastMoveLineId:
monsterData: monsterData:
die_Score: 0 die_Score: 0
isDie: 0 isDie: 0
fishTypeConfig: fishTypeConfig:
fishNumber: fishNumber:
fishName: fishName:
fishBrief:
fishType: 0 fishType: 0
fishScore: 0 fishScore: 0
killWeight: 0 killWeight: 0
pathList: pathList:
fishImage:
fishMultipleDesc:
moveLine:
bezierCurveData:
name:
start: {x: 0, y: 0}
controlPoints: []
end: {x: 0, y: 0}
moveTime: 0
moveSpeed: 0
skeleton: {fileID: 0} skeleton: {fileID: 0}
isSpine: 1 isSpine: 1
fishTypeID: 11035 fishTypeID: 11035
@@ -596,6 +608,8 @@ MonoBehaviour:
isDieFish: 0 isDieFish: 0
dieTime: 3 dieTime: 3
v3: {x: 0, y: 0, z: 0} v3: {x: 0, y: 0, z: 0}
isLocalCoin: 0
killerSitPos: -1
playable: {fileID: 0} playable: {fileID: 0}
--- !u!1001 &8126523871117287450 --- !u!1001 &8126523871117287450
PrefabInstance: PrefabInstance:
@@ -2646,6 +2660,16 @@ PrefabInstance:
propertyPath: m_Enabled propertyPath: m_Enabled
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 199226291264488589, guid: 24f1136b5772c7a428221f9ea1e47092,
type: 3}
propertyPath: m_Materials.Array.size
value: 1
objectReference: {fileID: 0}
- target: {fileID: 199924562111650557, guid: 24f1136b5772c7a428221f9ea1e47092,
type: 3}
propertyPath: m_Materials.Array.size
value: 1
objectReference: {fileID: 0}
- target: {fileID: 320336462471690087, guid: 24f1136b5772c7a428221f9ea1e47092, - target: {fileID: 320336462471690087, guid: 24f1136b5772c7a428221f9ea1e47092,
type: 3} type: 3}
propertyPath: m_Enabled propertyPath: m_Enabled
@@ -149,8 +149,8 @@ MonoBehaviour:
m_fontMaterials: [] m_fontMaterials: []
m_fontColor32: m_fontColor32:
serializedVersion: 2 serializedVersion: 2
rgba: 4294967295 rgba: 4281532197
m_fontColor: {r: 1, g: 1, b: 1, a: 1} m_fontColor: {r: 0.1462264, g: 1, b: 0.19559065, a: 1}
m_enableVertexGradient: 0 m_enableVertexGradient: 0
m_colorMode: 3 m_colorMode: 3
m_fontColorGradient: m_fontColorGradient:
@@ -175,7 +175,7 @@ MonoBehaviour:
m_fontSizeMax: 72 m_fontSizeMax: 72
m_fontStyle: 0 m_fontStyle: 0
m_HorizontalAlignment: 4 m_HorizontalAlignment: 4
m_VerticalAlignment: 256 m_VerticalAlignment: 1024
m_textAlignment: 65535 m_textAlignment: 65535
m_characterSpacing: 0 m_characterSpacing: 0
m_wordSpacing: 0 m_wordSpacing: 0
@@ -1004,7 +1004,7 @@ RectTransform:
m_GameObject: {fileID: 2256120632316597695} m_GameObject: {fileID: 2256120632316597695}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0.8, y: 0.8, z: 0.8} m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 1 m_ConstrainProportionsScale: 1
m_Children: m_Children:
- {fileID: 3066473336798849514} - {fileID: 3066473336798849514}
@@ -1366,8 +1366,8 @@ MonoBehaviour:
m_fontMaterials: [] m_fontMaterials: []
m_fontColor32: m_fontColor32:
serializedVersion: 2 serializedVersion: 2
rgba: 4294967295 rgba: 4281532197
m_fontColor: {r: 1, g: 1, b: 1, a: 1} m_fontColor: {r: 0.1462264, g: 1, b: 0.19559065, a: 1}
m_enableVertexGradient: 0 m_enableVertexGradient: 0
m_colorMode: 3 m_colorMode: 3
m_fontColorGradient: m_fontColorGradient:
@@ -3663,7 +3663,7 @@ RectTransform:
m_GameObject: {fileID: 5910028015393800118} m_GameObject: {fileID: 5910028015393800118}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0.8, y: 0.8, z: 0.8} m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 1 m_ConstrainProportionsScale: 1
m_Children: m_Children:
- {fileID: 8441262843426643071} - {fileID: 8441262843426643071}
@@ -3822,6 +3822,8 @@ GameObject:
serializedVersion: 6 serializedVersion: 6
m_Component: m_Component:
- component: {fileID: 6423145012526947125} - component: {fileID: 6423145012526947125}
- component: {fileID: 3341872679389971736}
- component: {fileID: 613810603270246481}
m_Layer: 5 m_Layer: 5
m_Name: SubPanelParent m_Name: SubPanelParent
m_TagString: Untagged m_TagString: Untagged
@@ -3848,6 +3850,46 @@ RectTransform:
m_AnchoredPosition: {x: 0, y: 0} m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5} m_Pivot: {x: 0.5, y: 0.5}
--- !u!223 &3341872679389971736
Canvas:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6399151385746884331}
m_Enabled: 1
serializedVersion: 3
m_RenderMode: 2
m_Camera: {fileID: 0}
m_PlaneDistance: 100
m_PixelPerfect: 0
m_ReceivesEvents: 1
m_OverrideSorting: 1
m_OverridePixelPerfect: 0
m_SortingBucketNormalizedSize: 0
m_VertexColorAlwaysGammaSpace: 0
m_AdditionalShaderChannelsFlag: 0
m_UpdateRectTransformForStandalone: 0
m_SortingLayerID: 0
m_SortingOrder: 10
m_TargetDisplay: 0
--- !u!114 &613810603270246481
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6399151385746884331}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
m_Name:
m_EditorClassIdentifier:
m_IgnoreReversedGraphics: 1
m_BlockingObjects: 0
m_BlockingMask:
serializedVersion: 2
m_Bits: 4294967295
--- !u!1 &6403645202956704703 --- !u!1 &6403645202956704703
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@@ -6130,8 +6172,8 @@ MonoBehaviour:
m_fontMaterials: [] m_fontMaterials: []
m_fontColor32: m_fontColor32:
serializedVersion: 2 serializedVersion: 2
rgba: 4294967295 rgba: 4281532197
m_fontColor: {r: 1, g: 1, b: 1, a: 1} m_fontColor: {r: 0.1462264, g: 1, b: 0.19559065, a: 1}
m_enableVertexGradient: 0 m_enableVertexGradient: 0
m_colorMode: 3 m_colorMode: 3
m_fontColorGradient: m_fontColorGradient:
@@ -6156,7 +6198,7 @@ MonoBehaviour:
m_fontSizeMax: 72 m_fontSizeMax: 72
m_fontStyle: 0 m_fontStyle: 0
m_HorizontalAlignment: 4 m_HorizontalAlignment: 4
m_VerticalAlignment: 256 m_VerticalAlignment: 1024
m_textAlignment: 65535 m_textAlignment: 65535
m_characterSpacing: 0 m_characterSpacing: 0
m_wordSpacing: 0 m_wordSpacing: 0
@@ -6377,7 +6419,7 @@ PrefabInstance:
- target: {fileID: 3429558903206714841, guid: 6c8512965de208f498306fbdfeb8eb5b, - target: {fileID: 3429558903206714841, guid: 6c8512965de208f498306fbdfeb8eb5b,
type: 3} type: 3}
propertyPath: m_AnchorMax.y propertyPath: m_AnchorMax.y
value: 1 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 3783151213167614958, guid: 6c8512965de208f498306fbdfeb8eb5b, - target: {fileID: 3783151213167614958, guid: 6c8512965de208f498306fbdfeb8eb5b,
type: 3} type: 3}
@@ -6387,7 +6429,7 @@ PrefabInstance:
- target: {fileID: 3783151213167614958, guid: 6c8512965de208f498306fbdfeb8eb5b, - target: {fileID: 3783151213167614958, guid: 6c8512965de208f498306fbdfeb8eb5b,
type: 3} type: 3}
propertyPath: m_IsActive propertyPath: m_IsActive
value: 0 value: 1
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 6114408877341087527, guid: 6c8512965de208f498306fbdfeb8eb5b, - target: {fileID: 6114408877341087527, guid: 6c8512965de208f498306fbdfeb8eb5b,
type: 3} type: 3}
@@ -150,7 +150,7 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
private GameObject _bingFengInstance; // 克隆出来的实例 private GameObject _bingFengInstance; // 克隆出来的实例
float bingFengDuration = 5f; // 冰封状态持续时间 float bingFengDuration = 5f; // 冰封状态持续时间
public float currBingFengTime = 0f; public float currBingFengTime = 0f;
private Dictionary<Component, float> _frozenAnimSpeeds = new Dictionary<Component, float>(); private Dictionary<Component, object> _frozenAnimSpeeds = new Dictionary<Component, object>();
// ⭐ 暴走/冰封本地数量:因为暂无扣减 API,激活时本地 -1,避免被 OnUserDataChanged 覆盖回服务端旧值 // ⭐ 暴走/冰封本地数量:因为暂无扣减 API,激活时本地 -1,避免被 OnUserDataChanged 覆盖回服务端旧值
private int _localBaoZouCount = -1; // -1 表示尚未初始化 private int _localBaoZouCount = -1; // -1 表示尚未初始化
@@ -538,6 +538,9 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
{ {
if (!on) if (!on)
{ {
// ⭐ 取消锁定开关 → 重置自动锁定激活状态,下次需重新手动锁定激活
_autoLockActivated = false;
// 本地清理锁定 // 本地清理锁定
if (currSitData != null) if (currSitData != null)
{ {
@@ -559,7 +562,13 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
} }
toggle_BaoZou.onValueChanged.AddListener(on => toggle_BaoZou.onValueChanged.AddListener(on =>
{ {
if (!on) return; if (!on)
{
// ⭐ 打开后只能等倒计时结束自动关闭,不允许玩家手动关闭
// 直接 SetIsOnWithoutNotify(true) 避免递归触发 onValueChanged
toggle_BaoZou.SetIsOnWithoutNotify(true);
return;
}
if (_localBaoZouCount <= 0) if (_localBaoZouCount <= 0)
{ {
toggle_BaoZou.SetIsOnWithoutNotify(false); toggle_BaoZou.SetIsOnWithoutNotify(false);
@@ -581,7 +590,13 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
} }
}); });
toggle_BingFeng.onValueChanged.AddListener(on => { toggle_BingFeng.onValueChanged.AddListener(on => {
if (!on) return; if (!on)
{
// ⭐ 打开后只能等倒计时结束自动关闭,不允许玩家手动关闭
// 直接 SetIsOnWithoutNotify(true) 避免递归触发 onValueChanged
toggle_BingFeng.SetIsOnWithoutNotify(true);
return;
}
if (_localBingFengCount <= 0) if (_localBingFengCount <= 0)
{ {
toggle_BingFeng.SetIsOnWithoutNotify(false); toggle_BingFeng.SetIsOnWithoutNotify(false);
@@ -1067,9 +1082,14 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
if (currFrenzyTime <= 0) if (currFrenzyTime <= 0)
{ {
toggle_BaoZou.isOn = false; // ⭐ 倒计时结束自动关闭:用 SetIsOnWithoutNotify 避免触发 onValueChanged
// (onValueChanged 里禁止手动关闭会强制设回 true)
// 并清理狂暴状态(攻速/动画/isFrenzy 标志)
toggle_BaoZou.SetIsOnWithoutNotify(false);
currFrenzyTime = 0f; currFrenzyTime = 0f;
if (img_BaoZou != null) img_BaoZou.fillAmount = 1f; if (img_BaoZou != null) img_BaoZou.fillAmount = 1f;
CreateFishManager.Instance.currGameType.isFrenzy = false;
SetFrenzy(false);
} }
} }
@@ -1429,45 +1449,9 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
currSitData.SetTripleLockTargets(targets); currSitData.SetTripleLockTargets(targets);
} }
//private void HandleLock() /// <summary>自动锁定是否已激活:玩家首次手动锁定一条鱼后激活,该鱼死亡后开始自动转换目标</summary>
//{ private bool _autoLockActivated = false;
// CrossPlatformInput input = GetInput();
// if (!toggle_Lock.isOn) return;
// // 只有按下或抬起的那一帧触发锁定(保留你原来的逻辑)
// if (!input.wasReleasedThisFrame && !input.wasPressedThisFrame) return;
// // UI 点击过滤
// if (IsPointerOverUI(input.position))
// return;
// // 🔧 修正:屏幕坐标转世界坐标需要指定 Z 轴(2D 正交相机专用)
// Vector3 mousePos = input.position;
// mousePos.z = -Camera.main.transform.position.z; // 关键修正
// Vector2 worldPos = Camera.main.ScreenToWorldPoint(mousePos);
// // 🔧 优化:将 LayerMask 缓存为成员变量,避免每次调用 GetMask(非必要,但更好)
// // 你可以在 Start 中初始化:fishLayerMask = LayerMask.GetMask("Fish");
// // 这里直接写原方式也可以,但建议如下:
// int fishLayer = LayerMask.GetMask("Fish");
// RaycastHit2D hit = Physics2D.Raycast(worldPos, Vector2.zero, 1, fishLayer);
// if (hit.collider != null)
// {
// MonsterContral monster = hit.collider.GetComponentInParent<MonsterContral>();
// currSitData.SetLockTarget(monster, hit.collider.transform);
// // 保留你原来的调用方式:new List<string> { monster?.guid }
// SyncLock(new List<string> { monster?.guid }, monster.colliderList.IndexOf(hit.collider.transform));
// }
// else
// {
// currSitData.ClearLock();
// SyncTurretState(TurretState.Idle);
// SyncLock(null); // 保留你原来的重载(可能是 SyncLock(object) 或 SyncLock(string))
// }
//}
private void HandleLock() private void HandleLock()
{ {
// ⭐ 退出倒计时期间屏蔽本地玩家手动锁定,其他玩家和机器人不受影响 // ⭐ 退出倒计时期间屏蔽本地玩家手动锁定,其他玩家和机器人不受影响
@@ -1521,6 +1505,9 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
Transform lockTr = ResolveLockTransform(monster, out colliderIndex); Transform lockTr = ResolveLockTransform(monster, out colliderIndex);
currSitData.SetLockTarget(monster, lockTr); currSitData.SetLockTarget(monster, lockTr);
SyncLock(new List<string> { monster?.guid }, colliderIndex); SyncLock(new List<string> { monster?.guid }, colliderIndex);
// ⭐ 手动锁定成功 → 激活自动锁定(该鱼死亡后自动转换目标)
_autoLockActivated = true;
} }
private void UpdateLockFX() private void UpdateLockFX()
{ {
@@ -1593,9 +1580,12 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
// ⭐ 退出倒计时期间屏蔽本地玩家自动锁定,其他玩家和机器人不受影响 // ⭐ 退出倒计时期间屏蔽本地玩家自动锁定,其他玩家和机器人不受影响
if (_isLeavingCountdown) return; if (_isLeavingCountdown) return;
// 自动锁定必须满足:自动开火 + 锁定开关开启 // 自动锁定必须在锁定开关开启时才工作
if (!toggle_SkillAuto.isOn) return; if (!toggle_Lock.isOn) return;
if (!toggle_Lock.isOn) return; // ✔ 自动锁定必须在锁定开关开启时才工作
// ⭐ 前提条件:玩家必须先手动锁定一条鱼来激活自动锁定
// 激活后,当锁定的鱼死亡,自动转换到下一个目标
if (!_autoLockActivated) return;
// 已经有锁定目标并且还活着,就不重复找 // 已经有锁定目标并且还活着,就不重复找
if (currSitData.isLock && if (currSitData.isLock &&
@@ -1605,6 +1595,7 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
return; return;
} }
// 当前锁定目标已死亡/失效 → 自动找下一个目标
MonsterContral target = FindAutoLockTarget(); MonsterContral target = FindAutoLockTarget();
if (target != null) if (target != null)
{ {
@@ -1616,9 +1607,13 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
} }
else else
{ {
currSitData.ClearLock(); // 场上没有可锁定目标 → 清除锁定(仅在当前有锁时清除,避免每帧广播)
SyncTurretState(TurretState.Idle); if (currSitData.isLock)
SyncLock(null); {
currSitData.ClearLock();
SyncTurretState(TurretState.Idle);
SyncLock(null);
}
} }
} }
@@ -1629,12 +1624,18 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
CreateFishManager.Instance.fishDatas_hashCodekey.Count == 0) CreateFishManager.Instance.fishDatas_hashCodekey.Count == 0)
return null; return null;
MonsterContral best = null;
float bestSqr = float.MaxValue;
// ⭐ 用世界坐标(Z=0平面),和 bot AI 一致,否则距离计算会异常(出现 3.4E+38 之类) // ⭐ 用世界坐标(Z=0平面),和 bot AI 一致,否则距离计算会异常(出现 3.4E+38 之类)
Vector3 origin = currSitData.turretWorldPos; Vector3 origin = currSitData.turretWorldPos;
// ⭐ 规则:特殊Boss / Boss鱼 / 特殊鱼 为高价值组(按优先级 + 距离最近),
// 黄金鱼 / 普通鱼 为普通组(随机选一只)
// 高价值组有目标时只从高价值组选;高价值组无目标时从普通组随机
MonsterContral best = null;
int bestPri = -1;
float bestSqr = float.MaxValue;
var normalList = new List<MonsterContral>();
foreach (var kv in CreateFishManager.Instance.fishDatas_hashCodekey) foreach (var kv in CreateFishManager.Instance.fishDatas_hashCodekey)
{ {
MonsterContral m = kv.Value; MonsterContral m = kv.Value;
@@ -1642,15 +1643,34 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
// ⭐ 路径进度过滤:刚出生(< 0.2)或即将离场(> 0.8)的鱼不作为自动锁定目标 // ⭐ 路径进度过滤:刚出生(< 0.2)或即将离场(> 0.8)的鱼不作为自动锁定目标
if (!IsFishPathLockable(m)) continue; if (!IsFishPathLockable(m)) continue;
float sqr = (m.transform.position - origin).sqrMagnitude; int pri = GetFishLockPriority(m);
if (sqr < bestSqr)
// 高价值组:特殊Boss(5) / Boss鱼(4) / 特殊鱼(3) → 优先级 + 距离最近
if (pri >= 3)
{ {
bestSqr = sqr; float sqr = (m.transform.position - origin).sqrMagnitude;
best = m; if (pri > bestPri || (pri == bestPri && sqr < bestSqr))
{
bestPri = pri;
bestSqr = sqr;
best = m;
}
}
// 普通组:黄金鱼(2) / 普通鱼(1) → 先收集,后面随机
else
{
normalList.Add(m);
} }
} }
return best; // 高价值组有目标 → 直接返回最高价值(同价值最近)的目标
if (best != null) return best;
// 高价值组无目标 → 从普通组随机选一只
if (normalList.Count > 0)
return normalList[Random.Range(0, normalList.Count)];
return null;
} }
//private void HandleAutoLock() //private void HandleAutoLock()
@@ -2116,8 +2136,14 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
foreach (var an in root.GetComponentsInChildren<Animation>(true)) foreach (var an in root.GetComponentsInChildren<Animation>(true))
{ {
if (!an.gameObject.activeInHierarchy || !an.isPlaying) continue; if (!an.gameObject.activeInHierarchy || !an.isPlaying) continue;
foreach (AnimationState state in an) state.speed = 0f; // ⭐ 记录每个 AnimationState 的原 speed,解冻时恢复原值而非硬编码 1f
_frozenAnimSpeeds[an] = 1f; var stateSpeeds = new List<float>();
foreach (AnimationState state in an)
{
stateSpeeds.Add(state.speed);
state.speed = 0f;
}
_frozenAnimSpeeds[an] = stateSpeeds;
} }
foreach (var pd in root.GetComponentsInChildren<UnityEngine.Playables.PlayableDirector>(true)) foreach (var pd in root.GetComponentsInChildren<UnityEngine.Playables.PlayableDirector>(true))
{ {
@@ -2136,10 +2162,20 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
if (kv.Key == null) continue; if (kv.Key == null) continue;
switch (kv.Key) switch (kv.Key)
{ {
case Spine.Unity.SkeletonAnimation s: s.timeScale = kv.Value; break; case Spine.Unity.SkeletonAnimation s: s.timeScale = (float)kv.Value; break;
case Animator a: a.speed = kv.Value; break; case Animator a: a.speed = (float)kv.Value; break;
case Animation an: case Animation an:
foreach (AnimationState state in an) state.speed = 1f; // ⭐ 恢复每个 AnimationState 的原 speed
if (kv.Value is List<float> stateSpeeds)
{
int i = 0;
foreach (AnimationState state in an)
{
if (i < stateSpeeds.Count)
state.speed = stateSpeeds[i];
i++;
}
}
break; break;
case UnityEngine.Playables.PlayableDirector pd: pd.Resume(); break; case UnityEngine.Playables.PlayableDirector pd: pd.Resume(); break;
} }
@@ -2368,8 +2368,8 @@ MonoBehaviour:
m_fontMaterials: [] m_fontMaterials: []
m_fontColor32: m_fontColor32:
serializedVersion: 2 serializedVersion: 2
rgba: 4294967295 rgba: 4278255415
m_fontColor: {r: 1, g: 1, b: 1, a: 1} m_fontColor: {r: 0.21535873, g: 1, b: 0, a: 1}
m_enableVertexGradient: 0 m_enableVertexGradient: 0
m_colorMode: 3 m_colorMode: 3
m_fontColorGradient: m_fontColorGradient:
@@ -2394,7 +2394,7 @@ MonoBehaviour:
m_fontSizeMax: 72 m_fontSizeMax: 72
m_fontStyle: 0 m_fontStyle: 0
m_HorizontalAlignment: 4 m_HorizontalAlignment: 4
m_VerticalAlignment: 256 m_VerticalAlignment: 1024
m_textAlignment: 65535 m_textAlignment: 65535
m_characterSpacing: 0 m_characterSpacing: 0
m_wordSpacing: 0 m_wordSpacing: 0
@@ -2733,7 +2733,7 @@ RectTransform:
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0 m_ConstrainProportionsScale: 1
m_Children: m_Children:
- {fileID: 1729723357291826897} - {fileID: 1729723357291826897}
m_Father: {fileID: 6442325590043047767} m_Father: {fileID: 6442325590043047767}
@@ -3379,8 +3379,8 @@ MonoBehaviour:
m_fontMaterials: [] m_fontMaterials: []
m_fontColor32: m_fontColor32:
serializedVersion: 2 serializedVersion: 2
rgba: 4294967295 rgba: 4278255415
m_fontColor: {r: 1, g: 1, b: 1, a: 1} m_fontColor: {r: 0.21535873, g: 1, b: 0, a: 1}
m_enableVertexGradient: 0 m_enableVertexGradient: 0
m_colorMode: 3 m_colorMode: 3
m_fontColorGradient: m_fontColorGradient:
@@ -3405,7 +3405,7 @@ MonoBehaviour:
m_fontSizeMax: 72 m_fontSizeMax: 72
m_fontStyle: 0 m_fontStyle: 0
m_HorizontalAlignment: 4 m_HorizontalAlignment: 4
m_VerticalAlignment: 256 m_VerticalAlignment: 1024
m_textAlignment: 65535 m_textAlignment: 65535
m_characterSpacing: 0 m_characterSpacing: 0
m_wordSpacing: 0 m_wordSpacing: 0
@@ -3564,14 +3564,12 @@ MonoBehaviour:
toggle_BaoZou: {fileID: 6820470193323630788} toggle_BaoZou: {fileID: 6820470193323630788}
tmp_BaoZouCount: {fileID: 284534771226263952} tmp_BaoZouCount: {fileID: 284534771226263952}
img_BaoZou: {fileID: 4519855428832475769} img_BaoZou: {fileID: 4519855428832475769}
frenzyDuration: 5
currFrenzyTime: 0 currFrenzyTime: 0
toggle_BingFeng: {fileID: 7126682788597616111} toggle_BingFeng: {fileID: 7126682788597616111}
tmp_BingFengCount: {fileID: 4517298797299028184} tmp_BingFengCount: {fileID: 4517298797299028184}
img_BingFeng: {fileID: 734296607713292731} img_BingFeng: {fileID: 734296607713292731}
bingFengEffect: {fileID: 1709254077376921, guid: a2a34db230a06c64c8d7cfad89a22d10, bingFengEffect: {fileID: 1709254077376921, guid: a2a34db230a06c64c8d7cfad89a22d10,
type: 3} type: 3}
bingFengDuration: 5
currBingFengTime: 0 currBingFengTime: 0
btn_GuaGuaKa: {fileID: 7915604937799543775} btn_GuaGuaKa: {fileID: 7915604937799543775}
tmp_GGKCount: {fileID: 7599905240918815376} tmp_GGKCount: {fileID: 7599905240918815376}
@@ -3884,6 +3882,8 @@ GameObject:
serializedVersion: 6 serializedVersion: 6
m_Component: m_Component:
- component: {fileID: 6423145012526947125} - component: {fileID: 6423145012526947125}
- component: {fileID: 7165923567967766691}
- component: {fileID: 8217361257888957425}
m_Layer: 5 m_Layer: 5
m_Name: SubPanelParent m_Name: SubPanelParent
m_TagString: Untagged m_TagString: Untagged
@@ -3910,6 +3910,46 @@ RectTransform:
m_AnchoredPosition: {x: 0, y: 0} m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5} m_Pivot: {x: 0.5, y: 0.5}
--- !u!223 &7165923567967766691
Canvas:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6399151385746884331}
m_Enabled: 1
serializedVersion: 3
m_RenderMode: 2
m_Camera: {fileID: 0}
m_PlaneDistance: 100
m_PixelPerfect: 0
m_ReceivesEvents: 1
m_OverrideSorting: 1
m_OverridePixelPerfect: 0
m_SortingBucketNormalizedSize: 0
m_VertexColorAlwaysGammaSpace: 0
m_AdditionalShaderChannelsFlag: 0
m_UpdateRectTransformForStandalone: 0
m_SortingLayerID: 0
m_SortingOrder: 10
m_TargetDisplay: 0
--- !u!114 &8217361257888957425
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6399151385746884331}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
m_Name:
m_EditorClassIdentifier:
m_IgnoreReversedGraphics: 1
m_BlockingObjects: 0
m_BlockingMask:
serializedVersion: 2
m_Bits: 4294967295
--- !u!1 &6478921468864931545 --- !u!1 &6478921468864931545
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@@ -4410,7 +4450,7 @@ RectTransform:
m_GameObject: {fileID: 6646657068787545170} m_GameObject: {fileID: 6646657068787545170}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0.8, y: 0.8, z: 0.8} m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 1 m_ConstrainProportionsScale: 1
m_Children: m_Children:
- {fileID: 3062198352733159756} - {fileID: 3062198352733159756}
@@ -5664,8 +5704,8 @@ MonoBehaviour:
m_fontMaterials: [] m_fontMaterials: []
m_fontColor32: m_fontColor32:
serializedVersion: 2 serializedVersion: 2
rgba: 4294967295 rgba: 4278255415
m_fontColor: {r: 1, g: 1, b: 1, a: 1} m_fontColor: {r: 0.21535873, g: 1, b: 0, a: 1}
m_enableVertexGradient: 0 m_enableVertexGradient: 0
m_colorMode: 3 m_colorMode: 3
m_fontColorGradient: m_fontColorGradient: