This commit is contained in:
2026-10-05 01:02:55 +08:00
parent ec3c947e2a
commit 06e1a12ae2
27 changed files with 3714 additions and 39 deletions
@@ -4152,6 +4152,8 @@ RectTransform:
- {fileID: 6572098329424512867}
- {fileID: 2879450444906246474}
- {fileID: 5178367143983105583}
- {fileID: 2786224979452906370}
- {fileID: 5333548299015275724}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
@@ -4286,6 +4288,17 @@ MonoBehaviour:
lockSetPanel: {fileID: 6702752155659137683}
lockSetItemTemplate: {fileID: 1136181874444908, guid: 53ed3608912462847bc3c8795cdbdb50,
type: 3}
btn_SetPopup: {fileID: 8750375040507536057}
setPanel: {fileID: 4955162030188466414}
exitViewPanel: {fileID: 2715889072372372478}
exitViewSeconds: 3
exitBounceScale: 1.6
exitBounceUpTime: 0.05
exitBounceBackTime: 0.3
exitBounceAudioID: 60009
exitViewTipText: "\u540C\u6B65\u670D\u52A1\u5668\u6570\u636E\u4E2D..."
waitTipPanel: {fileID: 5268738107410595606}
waitTipMessage: "\u6B63\u5728\u8FDE\u63A5\u670D\u52A1\u5668..."
nukeItemStagger: 0.1
nukeItemPopTime: 0.1
popupOpenTime: 0.2
@@ -15913,7 +15926,7 @@ PrefabInstance:
- target: {fileID: 3429558903206714841, guid: 6c8512965de208f498306fbdfeb8eb5b,
type: 3}
propertyPath: m_AnchorMax.y
value: 1
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3783151213167614958, guid: 6c8512965de208f498306fbdfeb8eb5b,
type: 3}
@@ -15923,7 +15936,7 @@ PrefabInstance:
- target: {fileID: 3783151213167614958, guid: 6c8512965de208f498306fbdfeb8eb5b,
type: 3}
propertyPath: m_IsActive
value: 0
value: 1
objectReference: {fileID: 0}
- target: {fileID: 6114408877341087527, guid: 6c8512965de208f498306fbdfeb8eb5b,
type: 3}
@@ -16058,7 +16071,7 @@ PrefabInstance:
- target: {fileID: 7125234996501131867, guid: 6c8512965de208f498306fbdfeb8eb5b,
type: 3}
propertyPath: m_AnchorMax.y
value: 1
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7125234996501131867, guid: 6c8512965de208f498306fbdfeb8eb5b,
type: 3}
@@ -16793,6 +16806,135 @@ RectTransform:
type: 3}
m_PrefabInstance: {fileID: 2659585630406882586}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &2717032965204163807
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 245637205031072731}
m_Modifications:
- target: {fileID: 1145342386761505, guid: 5c57b792ddded0d43a185f8b3788f573, type: 3}
propertyPath: m_Name
value: PW_ExitView
objectReference: {fileID: 0}
- target: {fileID: 224757551111698269, guid: 5c57b792ddded0d43a185f8b3788f573,
type: 3}
propertyPath: m_Pivot.x
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 224757551111698269, guid: 5c57b792ddded0d43a185f8b3788f573,
type: 3}
propertyPath: m_Pivot.y
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 224757551111698269, guid: 5c57b792ddded0d43a185f8b3788f573,
type: 3}
propertyPath: m_AnchorMax.x
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224757551111698269, guid: 5c57b792ddded0d43a185f8b3788f573,
type: 3}
propertyPath: m_AnchorMax.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224757551111698269, guid: 5c57b792ddded0d43a185f8b3788f573,
type: 3}
propertyPath: m_AnchorMin.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224757551111698269, guid: 5c57b792ddded0d43a185f8b3788f573,
type: 3}
propertyPath: m_AnchorMin.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224757551111698269, guid: 5c57b792ddded0d43a185f8b3788f573,
type: 3}
propertyPath: m_SizeDelta.x
value: 2
objectReference: {fileID: 0}
- target: {fileID: 224757551111698269, guid: 5c57b792ddded0d43a185f8b3788f573,
type: 3}
propertyPath: m_SizeDelta.y
value: 2
objectReference: {fileID: 0}
- target: {fileID: 224757551111698269, guid: 5c57b792ddded0d43a185f8b3788f573,
type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224757551111698269, guid: 5c57b792ddded0d43a185f8b3788f573,
type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224757551111698269, guid: 5c57b792ddded0d43a185f8b3788f573,
type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224757551111698269, guid: 5c57b792ddded0d43a185f8b3788f573,
type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224757551111698269, guid: 5c57b792ddded0d43a185f8b3788f573,
type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224757551111698269, guid: 5c57b792ddded0d43a185f8b3788f573,
type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224757551111698269, guid: 5c57b792ddded0d43a185f8b3788f573,
type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224757551111698269, guid: 5c57b792ddded0d43a185f8b3788f573,
type: 3}
propertyPath: m_AnchoredPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224757551111698269, guid: 5c57b792ddded0d43a185f8b3788f573,
type: 3}
propertyPath: m_AnchoredPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224757551111698269, guid: 5c57b792ddded0d43a185f8b3788f573,
type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224757551111698269, guid: 5c57b792ddded0d43a185f8b3788f573,
type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: -0
objectReference: {fileID: 0}
- target: {fileID: 224757551111698269, guid: 5c57b792ddded0d43a185f8b3788f573,
type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: -0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 5c57b792ddded0d43a185f8b3788f573, type: 3}
--- !u!1 &2715889072372372478 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 1145342386761505, guid: 5c57b792ddded0d43a185f8b3788f573,
type: 3}
m_PrefabInstance: {fileID: 2717032965204163807}
m_PrefabAsset: {fileID: 0}
--- !u!224 &2786224979452906370 stripped
RectTransform:
m_CorrespondingSourceObject: {fileID: 224757551111698269, guid: 5c57b792ddded0d43a185f8b3788f573,
type: 3}
m_PrefabInstance: {fileID: 2717032965204163807}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &3232876092691216913
PrefabInstance:
m_ObjectHideFlags: 0
@@ -17721,6 +17863,166 @@ PrefabInstance:
propertyPath: m_Name
value: PW_Set
objectReference: {fileID: 0}
- target: {fileID: 224151937143909378, guid: e0a7b660f2e099d4cb2e074cd22aa88e,
type: 3}
propertyPath: m_AnchorMax.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224151937143909378, guid: e0a7b660f2e099d4cb2e074cd22aa88e,
type: 3}
propertyPath: m_AnchorMin.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224151937143909378, guid: e0a7b660f2e099d4cb2e074cd22aa88e,
type: 3}
propertyPath: m_SizeDelta.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224151937143909378, guid: e0a7b660f2e099d4cb2e074cd22aa88e,
type: 3}
propertyPath: m_SizeDelta.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224151937143909378, guid: e0a7b660f2e099d4cb2e074cd22aa88e,
type: 3}
propertyPath: m_AnchoredPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224151937143909378, guid: e0a7b660f2e099d4cb2e074cd22aa88e,
type: 3}
propertyPath: m_AnchoredPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224190271342744232, guid: e0a7b660f2e099d4cb2e074cd22aa88e,
type: 3}
propertyPath: m_AnchorMax.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224190271342744232, guid: e0a7b660f2e099d4cb2e074cd22aa88e,
type: 3}
propertyPath: m_AnchorMin.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224190271342744232, guid: e0a7b660f2e099d4cb2e074cd22aa88e,
type: 3}
propertyPath: m_SizeDelta.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224190271342744232, guid: e0a7b660f2e099d4cb2e074cd22aa88e,
type: 3}
propertyPath: m_SizeDelta.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224190271342744232, guid: e0a7b660f2e099d4cb2e074cd22aa88e,
type: 3}
propertyPath: m_AnchoredPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224190271342744232, guid: e0a7b660f2e099d4cb2e074cd22aa88e,
type: 3}
propertyPath: m_AnchoredPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224286787577083157, guid: e0a7b660f2e099d4cb2e074cd22aa88e,
type: 3}
propertyPath: m_SizeDelta.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224346817611294551, guid: e0a7b660f2e099d4cb2e074cd22aa88e,
type: 3}
propertyPath: m_AnchorMax.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224346817611294551, guid: e0a7b660f2e099d4cb2e074cd22aa88e,
type: 3}
propertyPath: m_AnchorMin.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224346817611294551, guid: e0a7b660f2e099d4cb2e074cd22aa88e,
type: 3}
propertyPath: m_SizeDelta.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224346817611294551, guid: e0a7b660f2e099d4cb2e074cd22aa88e,
type: 3}
propertyPath: m_SizeDelta.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224346817611294551, guid: e0a7b660f2e099d4cb2e074cd22aa88e,
type: 3}
propertyPath: m_AnchoredPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224346817611294551, guid: e0a7b660f2e099d4cb2e074cd22aa88e,
type: 3}
propertyPath: m_AnchoredPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224398684275600899, guid: e0a7b660f2e099d4cb2e074cd22aa88e,
type: 3}
propertyPath: m_AnchorMax.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224398684275600899, guid: e0a7b660f2e099d4cb2e074cd22aa88e,
type: 3}
propertyPath: m_AnchorMin.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224398684275600899, guid: e0a7b660f2e099d4cb2e074cd22aa88e,
type: 3}
propertyPath: m_SizeDelta.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224398684275600899, guid: e0a7b660f2e099d4cb2e074cd22aa88e,
type: 3}
propertyPath: m_SizeDelta.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224398684275600899, guid: e0a7b660f2e099d4cb2e074cd22aa88e,
type: 3}
propertyPath: m_AnchoredPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224398684275600899, guid: e0a7b660f2e099d4cb2e074cd22aa88e,
type: 3}
propertyPath: m_AnchoredPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224446780920519515, guid: e0a7b660f2e099d4cb2e074cd22aa88e,
type: 3}
propertyPath: m_AnchorMax.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224446780920519515, guid: e0a7b660f2e099d4cb2e074cd22aa88e,
type: 3}
propertyPath: m_AnchorMin.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224446780920519515, guid: e0a7b660f2e099d4cb2e074cd22aa88e,
type: 3}
propertyPath: m_SizeDelta.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224446780920519515, guid: e0a7b660f2e099d4cb2e074cd22aa88e,
type: 3}
propertyPath: m_SizeDelta.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224446780920519515, guid: e0a7b660f2e099d4cb2e074cd22aa88e,
type: 3}
propertyPath: m_AnchoredPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224446780920519515, guid: e0a7b660f2e099d4cb2e074cd22aa88e,
type: 3}
propertyPath: m_AnchoredPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224480008001982165, guid: e0a7b660f2e099d4cb2e074cd22aa88e,
type: 3}
propertyPath: m_SizeDelta.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224934205924046420, guid: e0a7b660f2e099d4cb2e074cd22aa88e,
type: 3}
propertyPath: m_Pivot.x
@@ -17826,6 +18128,12 @@ PrefabInstance:
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: e0a7b660f2e099d4cb2e074cd22aa88e, type: 3}
--- !u!1 &4955162030188466414 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 1729051318689941, guid: e0a7b660f2e099d4cb2e074cd22aa88e,
type: 3}
m_PrefabInstance: {fileID: 4954629247521337467}
m_PrefabAsset: {fileID: 0}
--- !u!224 &5178367143983105583 stripped
RectTransform:
m_CorrespondingSourceObject: {fileID: 224934205924046420, guid: e0a7b660f2e099d4cb2e074cd22aa88e,
@@ -18077,6 +18385,135 @@ RectTransform:
type: 3}
m_PrefabInstance: {fileID: 5008366167776074941}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &5267228122963755938
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 245637205031072731}
m_Modifications:
- target: {fileID: 1870780094119092, guid: 23a588312e9d1f041bc1a7facc1f949c, type: 3}
propertyPath: m_Name
value: Hl_WaitTip
objectReference: {fileID: 0}
- target: {fileID: 224166202908477294, guid: 23a588312e9d1f041bc1a7facc1f949c,
type: 3}
propertyPath: m_Pivot.x
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 224166202908477294, guid: 23a588312e9d1f041bc1a7facc1f949c,
type: 3}
propertyPath: m_Pivot.y
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 224166202908477294, guid: 23a588312e9d1f041bc1a7facc1f949c,
type: 3}
propertyPath: m_AnchorMax.x
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224166202908477294, guid: 23a588312e9d1f041bc1a7facc1f949c,
type: 3}
propertyPath: m_AnchorMax.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224166202908477294, guid: 23a588312e9d1f041bc1a7facc1f949c,
type: 3}
propertyPath: m_AnchorMin.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224166202908477294, guid: 23a588312e9d1f041bc1a7facc1f949c,
type: 3}
propertyPath: m_AnchorMin.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224166202908477294, guid: 23a588312e9d1f041bc1a7facc1f949c,
type: 3}
propertyPath: m_SizeDelta.x
value: -2
objectReference: {fileID: 0}
- target: {fileID: 224166202908477294, guid: 23a588312e9d1f041bc1a7facc1f949c,
type: 3}
propertyPath: m_SizeDelta.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224166202908477294, guid: 23a588312e9d1f041bc1a7facc1f949c,
type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224166202908477294, guid: 23a588312e9d1f041bc1a7facc1f949c,
type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224166202908477294, guid: 23a588312e9d1f041bc1a7facc1f949c,
type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224166202908477294, guid: 23a588312e9d1f041bc1a7facc1f949c,
type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224166202908477294, guid: 23a588312e9d1f041bc1a7facc1f949c,
type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224166202908477294, guid: 23a588312e9d1f041bc1a7facc1f949c,
type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224166202908477294, guid: 23a588312e9d1f041bc1a7facc1f949c,
type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224166202908477294, guid: 23a588312e9d1f041bc1a7facc1f949c,
type: 3}
propertyPath: m_AnchoredPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224166202908477294, guid: 23a588312e9d1f041bc1a7facc1f949c,
type: 3}
propertyPath: m_AnchoredPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224166202908477294, guid: 23a588312e9d1f041bc1a7facc1f949c,
type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224166202908477294, guid: 23a588312e9d1f041bc1a7facc1f949c,
type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: -0
objectReference: {fileID: 0}
- target: {fileID: 224166202908477294, guid: 23a588312e9d1f041bc1a7facc1f949c,
type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: -0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 23a588312e9d1f041bc1a7facc1f949c, type: 3}
--- !u!1 &5268738107410595606 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 1870780094119092, guid: 23a588312e9d1f041bc1a7facc1f949c,
type: 3}
m_PrefabInstance: {fileID: 5267228122963755938}
m_PrefabAsset: {fileID: 0}
--- !u!224 &5333548299015275724 stripped
RectTransform:
m_CorrespondingSourceObject: {fileID: 224166202908477294, guid: 23a588312e9d1f041bc1a7facc1f949c,
type: 3}
m_PrefabInstance: {fileID: 5267228122963755938}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &5323693120528124528
PrefabInstance:
m_ObjectHideFlags: 0
@@ -101,6 +101,36 @@ public class GameMainPanel_XJMH : GameMainPanel_FishBase
[Tooltip("锁定条目模板:拖 Assets/Art/XJMH/pw/pw_prefab/item/PW_SetLockItem.prefab;留空则只开关面板、不生成条目")]
public GameObject lockSetItemTemplate;
// ==================== 设置面板(原版 PW_Set:音乐/音效/震动 + 画质三档) ====================
[Header("设置面板(原版 PW_Set:音乐/音效/震动 + 画质)")]
[Tooltip("打开设置面板的按钮(如设置列表里的设置项);留空则该面板没有入口")]
public Button btn_SetPopup;
[Tooltip("设置面板:拖 XJMH 预制体里已嵌好的 PW_Set 物体(初始会自动隐藏)。\n开关与通用设置(UIHome_BY_SettingPenel)同一套存储:音乐/音效=slider 0/1、画质=GraphicsQuality")]
public GameObject setPanel;
// ==================== 退出倒计时(原版 PW_ExitView) ====================
[Header("退出倒计时(原版 PW_ExitView)")]
[Tooltip("原版 PW_ExitView 面板:拖 Assets/Art/XJMH/pw/pw_prefab/view/PW_ExitView.prefab 的实例(初始自动隐藏);留空则点退出走父类确认框流程")]
public GameObject exitViewPanel;
[Tooltip("倒计时起始秒数(原版 3:显示 3→2→1→0 后进入退出加载界面)")]
public int exitViewSeconds = 3;
[Tooltip("数字跳动放大倍数(原版 1.6)")]
public float exitBounceScale = 1.6f;
[Tooltip("跳动放大时长(秒,原版 0.05)")]
public float exitBounceUpTime = 0.05f;
[Tooltip("跳动回弹时长(秒,原版 0.3)")]
public float exitBounceBackTime = 0.3f;
[Tooltip("每拍跳动音效 id(PW_Button,原版 SoundMgr:PlaySound(Button))")]
public int exitBounceAudioID = 60009;
[Tooltip("副标题文案(原版 PW_Config.Text.SyncServerData)")]
public string exitViewTipText = "同步服务器数据中...";
// ==================== 断线重连等待提示(Hl_WaitTip) ====================
[Header("断线重连等待提示(Hl_WaitTip)")]
[Tooltip("Hl_WaitTip 面板:拖 Assets/hall/hallprefab/view/Hl_WaitTip.prefab 的实例(建议放进面板预制体最上层;自带全屏 Canvas + 转圈粒子,初始自动隐藏);留空则不提示")]
public GameObject waitTipPanel;
[Tooltip("提示文案(预制体默认「正在连接服务器...」)")]
public string waitTipMessage = "正在连接服务器...";
[Header("核弹列表动画(照原版 Rocket 逐项弹出)")]
[Tooltip("相邻条目的弹出/收缩间隔(秒),原版 0.1")]
@@ -122,6 +152,9 @@ public class GameMainPanel_XJMH : GameMainPanel_FishBase
InitSettingPopup();
InitHelpPanel();
InitLockSetPanel();
InitSetPanel();
InitExitView();
InitWaitTip();
}
public override void Start()
@@ -239,6 +272,31 @@ public class GameMainPanel_XJMH : GameMainPanel_FishBase
lockSetPanel.transform.localScale = Vector3.one;
lockSetPanel.SetActive(false);
}
// 设置面板:离场立即收起
if (setPanel != null)
{
setPanel.transform.DOKill();
setPanel.transform.localScale = Vector3.one;
setPanel.SetActive(false);
}
// 退出倒计时:离场立即终止协程并收起
if (_exitRoutine != null)
{
StopCoroutine(_exitRoutine);
_exitRoutine = null;
}
_exitViewRunning = false;
if (exitViewPanel != null)
{
exitViewPanel.transform.DOKill();
exitViewPanel.transform.localScale = Vector3.one;
exitViewPanel.SetActive(false);
}
// 重连等待提示:离场立即收起
if (waitTipPanel != null) waitTipPanel.SetActive(false);
}
/// <summary>
@@ -1607,6 +1665,350 @@ public class GameMainPanel_XJMH : GameMainPanel_FishBase
},
};
// ==================== 断线重连等待提示(Hl_WaitTip) ====================
// socket 断线自动重连期间显示"正在连接服务器..."全屏等待提示(原版重连等待的等价物):
// - 重连状态来自 WebSocketManager.OnReconnectingChanged(事件在重连协程的开始/结束点统一广播,
// 成功、取消(登出/主动关闭)都会收到 false,不会卡提示)
// - 任意 socket 在重连 → 显示;全部恢复 → 收起
// - Hl_WaitTip 预制体自带全屏 Canvas(遮罩挡点击)+ 粒子转圈 + message 文案,直接 SetActive 显隐
private readonly HashSet<SocketType> _reconnectingTypes = new HashSet<SocketType>(); // 当前在重连的 socket
/// <summary>
/// 重连提示初始化:写文案、初始隐藏、订阅 socket 重连事件。
/// 未拖 waitTipPanel 时也保持订阅(只维护集合不显示),不影响其它功能。
/// </summary>
private void InitWaitTip()
{
if (waitTipPanel != null)
{
waitTipPanel.SetActive(false); // 初始隐藏
SetTextContent(FindChildByName(waitTipPanel.transform, "message"), waitTipMessage);
}
WebSocketManager.OnReconnectingChanged -= OnSocketReconnectingChanged; // 防重复订阅
WebSocketManager.OnReconnectingChanged += OnSocketReconnectingChanged;
}
/// <summary>socket 重连状态变化:有任意 socket 在重连 → 显示等待提示;全部恢复 → 收起</summary>
private void OnSocketReconnectingChanged(SocketType type, bool reconnecting)
{
if (reconnecting) _reconnectingTypes.Add(type);
else _reconnectingTypes.Remove(type);
bool show = _reconnectingTypes.Count > 0;
if (waitTipPanel != null && waitTipPanel.activeSelf != show)
waitTipPanel.SetActive(show);
}
/// <summary>注销重连事件(父类 OnDestroy 里有自己的清理,照常链式调用)</summary>
public override void OnDestroy()
{
WebSocketManager.OnReconnectingChanged -= OnSocketReconnectingChanged;
base.OnDestroy();
}
// ==================== 退出倒计时(原版 PW_ExitView) ====================
// 移植自原版 PW_ExitView.txt + PW_GameView:Click_Back(原版点退出无确认框,直接进倒计时):
// - 点退出 → 显示 PW_ExitView 全屏倒计时:3 → 2 → 1 → 0,每拍数字跳动(1.6→1)+ 按钮音效,
// 副标题"同步服务器数据中..."(PW_Config.Text.SyncServerData)
// - 数字走完(原版 time < 0 才回调)→ 收起倒计时,进入父类现有退出加载流程(RequestLeaveRoom:
// 进度条卸载 → 回大厅)
// - 原版还有"系统返还金币"展示(GainNotify source=2 + mGORemainValue 淡入);
// 本项目协议暂无该数据源,返还区保持隐藏(文案已按原版写好,后续有数据再接)
// - ⭐ 父类给退出按钮绑的是确认框流程(StartLeaveCountdown);这里仅从 XJMH 侧重绑成原版倒计时,
// 没拖 exitViewPanel 时保持父类确认框流程不变(父类代码零改动)
private Transform _exitTimeText; // mTextTime(倒计时数字)
private GameObject _exitRemainRoot; // mGORemainValue(返还区,原版默认隐藏)
private Coroutine _exitRoutine;
private bool _exitViewRunning; // 倒计时中(防重复点击)
/// <summary>返还区说明文案(照原版 PW_Config.Text.RemainValue)</summary>
private const string ExitRemainLabel = "系统返还特殊事件以及特殊怪折算的金币";
/// <summary>
/// 退出倒计时初始化(照原版 PW_ExitView:InitUI/InitView 的节点与文案),并把退出按钮改绑到倒计时。
/// </summary>
private void InitExitView()
{
if (exitViewPanel == null) return;
if (btn_TuiChu != null)
{
btn_TuiChu.onClick.RemoveAllListeners();
btn_TuiChu.onClick.AddListener(OnXjmhExitClicked);
}
exitViewPanel.SetActive(false); // 初始收起
// 背景遮挡:倒计时期间挡住后面的打鱼输入(同其它全屏面板)
var rootImg = exitViewPanel.GetComponent<Image>();
if (rootImg != null) rootImg.raycastTarget = true;
_exitTimeText = FindChildByName(exitViewPanel.transform, "mTextTime");
_exitRemainRoot = FindChildByName(exitViewPanel.transform, "mGORemainValue")?.gameObject;
// 固定文案(照原版 InitView)
SetTextContent(_exitTimeText, exitViewSeconds.ToString());
SetTextContent(FindChildByName(exitViewPanel.transform, "mTextTips"), exitViewTipText);
SetTextContent(FindChildByName(_exitRemainRoot != null ? _exitRemainRoot.transform : null, "mTextRemain"), ExitRemainLabel);
if (_exitRemainRoot != null) _exitRemainRoot.SetActive(false); // 本项目暂无返还数据源
}
/// <summary>退出按钮(原版 PW_GameView:Click_Back:直接进倒计时)</summary>
private void OnXjmhExitClicked()
{
if (_exitViewRunning || exitViewPanel == null) return; // 倒计时中防重复
_exitViewRunning = true;
exitViewPanel.SetActive(true);
_exitRoutine = StartCoroutine(ExitViewRoutine());
}
/// <summary>
/// 倒计时(照原版 InitView + StartTimer):先显示 3,之后每 1 秒 -1(2、1、0),每拍跳动;
/// 数字走完(原版 time &lt; 0)→ 收起面板并进入退出加载界面(父类 RequestLeaveRoom)。
/// </summary>
private IEnumerator ExitViewRoutine()
{
int t = exitViewSeconds; // 原版 3
SetExitTimeText(t);
BounceExitTime();
while (true)
{
yield return new WaitForSeconds(1f);
t--;
if (t < 0) break; // 原版:time < 0 才回调
SetExitTimeText(t);
BounceExitTime();
}
_exitRoutine = null;
_exitViewRunning = false;
if (exitViewPanel != null) exitViewPanel.SetActive(false);
RequestLeaveRoom(); // 父类现有离房流程(进度条卸载 = 退出加载界面 → 回大厅)
}
private void SetExitTimeText(int value)
{
SetTextContent(_exitTimeText, value.ToString());
}
/// <summary>数字跳动(照原版 BounceNum:放大 1.6 → 回弹到 1,带按钮音效)</summary>
private void BounceExitTime()
{
if (_exitTimeText != null)
{
var tr = _exitTimeText;
tr.DOKill();
tr.localScale = Vector3.one;
tr.DOScale(Vector3.one * exitBounceScale, exitBounceUpTime)
.OnComplete(() => tr.DOScale(Vector3.one, exitBounceBackTime));
}
AudioManager.Instance.PlayerFX(exitBounceAudioID);
}
// ==================== 设置面板(原版 PW_Set,与通用设置 UIHome_BY_SettingPenel 同一套存储) ====================
// 移植自原版 PW_Set.txt(面板 UI/开关逻辑照原版):
// - 音乐开关 ↔ 通用设置音乐滑条:PlayerPrefs "slider_AudioBG" 0/1 + 混音器 BGVolume(同款落地)
// - 音效开关 ↔ 通用设置音效滑条:PlayerPrefs "slider_FX" 0/1 + 混音器 FXVolume
// - 震动开关:原版 key "PW_OpenShake"(项目暂无震动接口,先只记状态)
// - 画质三档(低帧/流畅/华丽)↔ 通用设置画质:PlayerPrefs "GraphicsQuality" 0/1/2 + QualitySettings
// - 开/关两个按钮互斥显示(原版 SetActive(not open)/(open)),返回键缩放收起
/// <summary>画质三档文字(照原版 PW_Config.Text.LowPower1~3)</summary>
private static readonly string[] XjmhLowPowerTexts = { "低帧", "流畅", "华丽" };
private Button _setBtnCloseMusic, _setBtnOpenMusic;
private Button _setBtnCloseEffect, _setBtnOpenEffect;
private Button _setBtnCloseShake, _setBtnOpenShake;
private readonly Transform[] _setPowerTexts = new Transform[3]; // RightSwitch/1~3/Text
private readonly GameObject[] _setPowerOpens = new GameObject[3]; // RightSwitch/1~3/mBtnOpenPower(选中指示)
/// <summary>
/// 设置面板初始化:绑入口按钮、抓内部节点(照原版 PW_Set:InitUI)、初始隐藏。
/// 未拖面板时全部跳过(不影响其它功能)。
/// </summary>
private void InitSetPanel()
{
if (btn_SetPopup != null)
{
btn_SetPopup.onClick.RemoveAllListeners();
btn_SetPopup.onClick.AddListener(ToggleSetPanel);
}
if (setPanel == null) return;
setPanel.SetActive(false); // 初始收起
// 背景遮挡(同锁定面板:原版打开时 SetCanShoot(false) 的等价做法,避免点到后面的打鱼输入)
var rootImg = setPanel.GetComponent<Image>();
if (rootImg != null) rootImg.raycastTarget = true;
// 返回(照原版 mBtnBack:收起;原版同时恢复射击,本项目由面板整体收起等价)
var back = FindButton(setPanel.transform, "mBtnBack");
if (back != null)
{
back.onClick.RemoveAllListeners();
back.onClick.AddListener(() => CloseScalePanel(setPanel));
}
// 音乐 / 音效 / 震动(LeftSwitch 下开/关两个按钮,照原版 InitUI 的 AddClick)
_setBtnCloseMusic = FindButton(setPanel.transform, "mBtnCloseMusic");
_setBtnOpenMusic = FindButton(setPanel.transform, "mBtnOpenMusic");
_setBtnCloseEffect = FindButton(setPanel.transform, "mBtnCloseEffect");
_setBtnOpenEffect = FindButton(setPanel.transform, "mBtnOpenEffect");
_setBtnCloseShake = FindButton(setPanel.transform, "mBtnCloseShake");
_setBtnOpenShake = FindButton(setPanel.transform, "mBtnOpenShake");
BindSetToggle(_setBtnCloseMusic, ToggleMusic);
BindSetToggle(_setBtnOpenMusic, ToggleMusic);
BindSetToggle(_setBtnCloseEffect, ToggleEffect);
BindSetToggle(_setBtnOpenEffect, ToggleEffect);
BindSetToggle(_setBtnCloseShake, ToggleShake);
BindSetToggle(_setBtnOpenShake, ToggleShake);
// 按钮文字(照原版 InitView:Close="关"、Open="开")
SetButtonLabel(_setBtnCloseMusic, "关");
SetButtonLabel(_setBtnOpenMusic, "开");
SetButtonLabel(_setBtnCloseEffect, "关");
SetButtonLabel(_setBtnOpenEffect, "开");
SetButtonLabel(_setBtnCloseShake, "关");
SetButtonLabel(_setBtnOpenShake, "开");
// 画质三档(RightSwitch/1~3,照原版只做 1~3;节点 4 预制体里本来就是关的)
var rightSwitch = FindChildByName(setPanel.transform, "RightSwitch");
for (int i = 0; i < 3; i++)
{
var node = rightSwitch != null ? rightSwitch.Find((i + 1).ToString()) : null;
_setPowerTexts[i] = FindChildByName(node, "Text");
_setPowerOpens[i] = FindChildByName(node, "mBtnOpenPower")?.gameObject;
var btn = FindButton(node, "mBtnClosePower"); // 原版点击球就叫 mBtnClosePower
if (btn != null)
{
int level = i + 1; // 原版档位 1-based
btn.onClick.RemoveAllListeners();
btn.onClick.AddListener(() => ChangeLowPower(level));
}
}
}
/// <summary>开关设置面板(入口在设置列表里)</summary>
private void ToggleSetPanel()
{
if (setPanel == null)
{
Debug.LogWarning("[XJMH] setPanel 未配置,设置面板无法打开");
return;
}
if (setPanel.activeSelf)
{
CloseScalePanel(setPanel);
}
else
{
RefreshSetPanelState(); // 照原版 InitView:打开时按存储刷新开关状态
OpenScalePanel(setPanel);
}
}
/// <summary>
/// 按当前存储刷新开关显示(照原版 InitView)——读写与通用设置面板同一套:
/// 音乐/音效 = PlayerPrefs float "slider_AudioBG"/"slider_FX"(0=关 其余=开),画质 = int "GraphicsQuality"(0/1/2)。
/// </summary>
private void RefreshSetPanelState()
{
bool musicOpen = PlayerPrefs.GetFloat("slider_AudioBG", 1f) != 0f;
bool effectOpen = PlayerPrefs.GetFloat("slider_FX", 1f) != 0f;
bool shakeOpen = PlayerPrefs.GetInt("PW_OpenShake", 0) == 1;
SwapSetSwitch(_setBtnCloseMusic, _setBtnOpenMusic, musicOpen);
SwapSetSwitch(_setBtnCloseEffect, _setBtnOpenEffect, effectOpen);
SwapSetSwitch(_setBtnCloseShake, _setBtnOpenShake, shakeOpen);
int quality = PlayerPrefs.GetInt("GraphicsQuality", 1);
for (int i = 0; i < 3; i++)
{
SetTextContent(_setPowerTexts[i], XjmhLowPowerTexts[i]);
if (_setPowerOpens[i] != null) _setPowerOpens[i].SetActive(i == quality);
}
}
/// <summary>开/关按钮互斥显示(照原版 SetActive(not open)/(open))</summary>
private static void SwapSetSwitch(Button closeBtn, Button openBtn, bool open)
{
if (closeBtn != null) closeBtn.gameObject.SetActive(!open);
if (openBtn != null) openBtn.gameObject.SetActive(open);
}
/// <summary>音乐开关(照原版 ChangeMusic:存 0/1 + 混音器落地,与通用设置滑条同款)</summary>
private void ToggleMusic()
{
bool open = PlayerPrefs.GetFloat("slider_AudioBG", 1f) == 0f; // 当前关 → 点后开
PlayerPrefs.SetFloat("slider_AudioBG", open ? 1f : 0f);
PlayerPrefs.Save();
ApplyMixerVolume("BGVolume", open ? 1f : 0f);
RefreshSetPanelState();
}
/// <summary>音效开关(照原版 ChangeEffect)</summary>
private void ToggleEffect()
{
bool open = PlayerPrefs.GetFloat("slider_FX", 1f) == 0f;
PlayerPrefs.SetFloat("slider_FX", open ? 1f : 0f);
PlayerPrefs.Save();
ApplyMixerVolume("FXVolume", open ? 1f : 0f);
RefreshSetPanelState();
}
/// <summary>震动开关(照原版 ChangeShake:存 "PW_OpenShake";项目暂无震动接口,先只记状态)</summary>
private void ToggleShake()
{
bool open = PlayerPrefs.GetInt("PW_OpenShake", 0) != 1;
PlayerPrefs.SetInt("PW_OpenShake", open ? 1 : 0);
PlayerPrefs.Save();
RefreshSetPanelState();
}
/// <summary>切画质档(照原版 ChangeLowPower):原版档 1/2/3 ↔ 通用画质 0/1/2</summary>
private void ChangeLowPower(int level)
{
int quality = Mathf.Clamp(level - 1, 0, 2);
if (PlayerPrefs.GetInt("GraphicsQuality", 1) != quality)
{
PlayerPrefs.SetInt("GraphicsQuality", quality);
PlayerPrefs.Save();
// 与通用设置面板同款落地:applyExpensiveChanges 必须为 false(URP 下立即切换会重建管线,可能闪退)
QualitySettings.SetQualityLevel(quality, false);
}
RefreshSetPanelState();
}
/// <summary>与通用设置面板同款落地:0/1 线性值转分贝写进 AudioMixer</summary>
private static void ApplyMixerVolume(string mixerParam, float value)
{
float dB = 20f * Mathf.Log10(Mathf.Max(value, 0.0001f));
AudioManager.Instance.audioMixer.SetFloat(mixerParam, dB);
}
/// <summary>绑开关按钮的点击(照原版 AddClick)</summary>
private static void BindSetToggle(Button btn, UnityEngine.Events.UnityAction action)
{
if (btn == null) return;
btn.onClick.RemoveAllListeners();
btn.onClick.AddListener(action);
}
/// <summary>写按钮上的 "Text" 子节点文字</summary>
private static void SetButtonLabel(Button btn, string text)
{
if (btn == null) return;
SetTextContent(FindChildByName(btn.transform, "Text"), text);
}
// ==================== 锁定设置面板(原版 PW_SetLock,长按锁定键打开) ====================
// 面板 UI/勾选/全选/返回应用逻辑照原版 PW_SetLock.txt;
// 列表数据改为与"帮助-图鉴"同一份数据源动态读取: