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
Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.5 KiB

After

Width:  |  Height:  |  Size: 13 KiB

@@ -8,7 +8,7 @@ TextureImporter:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 0
linearTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.4 KiB

After

Width:  |  Height:  |  Size: 13 KiB

@@ -8,7 +8,7 @@ TextureImporter:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 0
linearTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

@@ -8,7 +8,7 @@ TextureImporter:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 0
linearTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
Binary file not shown.

Before

Width:  |  Height:  |  Size: 480 B

After

Width:  |  Height:  |  Size: 836 B

@@ -93,7 +93,7 @@ TextureImporter:
uncompressedFormat: 0
desiredFormat: 0
usageMode: 0
colorSpace: 1
colorSpace: 0
androidETC2FallbackFormat: 0
width: 0
height: 0
@@ -203,7 +203,7 @@ MonoBehaviour:
m_GameObject: {fileID: 1856116721579372}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 86fe8f3fc59dc06ea6b45a1bbee64682, type: 3}
m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
m_Name:
m_EditorClassIdentifier:
m_IgnoreReversedGraphics: 1
@@ -249,7 +249,7 @@ MonoBehaviour:
m_GameObject: {fileID: 1328894664248940}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3cf5a44414476512e00c3e7a2569a919, type: 3}
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
@@ -305,7 +305,7 @@ MonoBehaviour:
m_GameObject: {fileID: 1262301063922831}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 04f84fc2003509a5e7e068ec1271cc40, type: 3}
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
@@ -338,7 +338,7 @@ MonoBehaviour:
m_GameObject: {fileID: 1262301063922831}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 598ca59b26b303be9752bcc87e36626e, type: 3}
m_Script: {fileID: 11500000, guid: e19747de3f5aca642ab2be37e372fb86, type: 3}
m_Name:
m_EditorClassIdentifier:
m_EffectColor: {r: 0, g: 0, b: 0, a: 0.5}
@@ -380,7 +380,7 @@ MonoBehaviour:
m_GameObject: {fileID: 1105772390308357}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 69dacd7a039c12e90cde90bbae65247a, type: 3}
m_Script: {fileID: 11500000, guid: 3312d7739989d2b4e91e6319e9a96d76, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Padding: {x: 0, y: 0, z: 0, w: 0}
@@ -461,7 +461,7 @@ MonoBehaviour:
m_GameObject: {fileID: 1723517296033731}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3cf5a44414476512e00c3e7a2569a919, type: 3}
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
@@ -517,7 +517,7 @@ MonoBehaviour:
m_GameObject: {fileID: 1177703397216192}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 04f84fc2003509a5e7e068ec1271cc40, type: 3}
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
@@ -550,7 +550,7 @@ MonoBehaviour:
m_GameObject: {fileID: 1177703397216192}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 598ca59b26b303be9752bcc87e36626e, type: 3}
m_Script: {fileID: 11500000, guid: e19747de3f5aca642ab2be37e372fb86, type: 3}
m_Name:
m_EditorClassIdentifier:
m_EffectColor: {r: 0.2666667, g: 0.2431373, b: 0.2352941, a: 1}
@@ -203,7 +203,7 @@ MonoBehaviour:
m_GameObject: {fileID: 1614906730251133}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 86fe8f3fc59dc06ea6b45a1bbee64682, type: 3}
m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
m_Name:
m_EditorClassIdentifier:
m_IgnoreReversedGraphics: 1
@@ -249,7 +249,7 @@ MonoBehaviour:
m_GameObject: {fileID: 1001504820255809}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3cf5a44414476512e00c3e7a2569a919, type: 3}
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
@@ -305,7 +305,7 @@ MonoBehaviour:
m_GameObject: {fileID: 1827780608920913}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 04f84fc2003509a5e7e068ec1271cc40, type: 3}
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
@@ -338,7 +338,7 @@ MonoBehaviour:
m_GameObject: {fileID: 1827780608920913}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 598ca59b26b303be9752bcc87e36626e, type: 3}
m_Script: {fileID: 11500000, guid: e19747de3f5aca642ab2be37e372fb86, type: 3}
m_Name:
m_EditorClassIdentifier:
m_EffectColor: {r: 0, g: 0, b: 0, a: 0.5}
@@ -380,7 +380,7 @@ MonoBehaviour:
m_GameObject: {fileID: 1035557567939554}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 69dacd7a039c12e90cde90bbae65247a, type: 3}
m_Script: {fileID: 11500000, guid: 3312d7739989d2b4e91e6319e9a96d76, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Padding: {x: 0, y: 0, z: 0, w: 0}
@@ -461,7 +461,7 @@ MonoBehaviour:
m_GameObject: {fileID: 1002570979705875}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3cf5a44414476512e00c3e7a2569a919, type: 3}
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
@@ -517,7 +517,7 @@ MonoBehaviour:
m_GameObject: {fileID: 1627832129779596}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 04f84fc2003509a5e7e068ec1271cc40, type: 3}
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
@@ -550,7 +550,7 @@ MonoBehaviour:
m_GameObject: {fileID: 1627832129779596}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 598ca59b26b303be9752bcc87e36626e, type: 3}
m_Script: {fileID: 11500000, guid: e19747de3f5aca642ab2be37e372fb86, type: 3}
m_Name:
m_EditorClassIdentifier:
m_EffectColor: {r: 0.2666667, g: 0.2431373, b: 0.2352941, a: 1}
@@ -201,7 +201,7 @@ MonoBehaviour:
m_GameObject: {fileID: 1145342386761505}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 86fe8f3fc59dc06ea6b45a1bbee64682, type: 3}
m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
m_Name:
m_EditorClassIdentifier:
m_IgnoreReversedGraphics: 1
@@ -245,7 +245,7 @@ MonoBehaviour:
m_GameObject: {fileID: 1877015501141982}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8b6b0933debec03db3ed40115224c1a8, type: 3}
m_Script: {fileID: 11500000, guid: 1344c3c82d62a2a41a3576d8abb8e3ea, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
@@ -298,7 +298,7 @@ MonoBehaviour:
m_GameObject: {fileID: 1793351503720265}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 04f84fc2003509a5e7e068ec1271cc40, type: 3}
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 2100000, guid: e8cb7d78711c7a74db5c97e4624bedd4, type: 2}
@@ -343,7 +343,7 @@ MonoBehaviour:
m_GameObject: {fileID: 1793351503720265}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 598ca59b26b303be9752bcc87e36626e, type: 3}
m_Script: {fileID: 11500000, guid: e19747de3f5aca642ab2be37e372fb86, type: 3}
m_Name:
m_EditorClassIdentifier:
m_EffectColor: {r: 0.4392157, g: 0.145098, b: 0, a: 1}
@@ -385,7 +385,7 @@ MonoBehaviour:
m_GameObject: {fileID: 1065561607830656}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 04f84fc2003509a5e7e068ec1271cc40, type: 3}
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
@@ -418,7 +418,7 @@ MonoBehaviour:
m_GameObject: {fileID: 1065561607830656}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 598ca59b26b303be9752bcc87e36626e, type: 3}
m_Script: {fileID: 11500000, guid: e19747de3f5aca642ab2be37e372fb86, type: 3}
m_Name:
m_EditorClassIdentifier:
m_EffectColor: {r: 0.4392157, g: 0.145098, b: 0, a: 1}
@@ -482,7 +482,7 @@ MonoBehaviour:
m_GameObject: {fileID: 1057876872026263}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 04f84fc2003509a5e7e068ec1271cc40, type: 3}
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
@@ -515,7 +515,7 @@ MonoBehaviour:
m_GameObject: {fileID: 1057876872026263}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 598ca59b26b303be9752bcc87e36626e, type: 3}
m_Script: {fileID: 11500000, guid: e19747de3f5aca642ab2be37e372fb86, type: 3}
m_Name:
m_EditorClassIdentifier:
m_EffectColor: {r: 0.4392157, g: 0.145098, b: 0, a: 1}
@@ -557,7 +557,7 @@ MonoBehaviour:
m_GameObject: {fileID: 1538230333850670}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3cf5a44414476512e00c3e7a2569a919, type: 3}
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
@@ -613,7 +613,7 @@ MonoBehaviour:
m_GameObject: {fileID: 1408985297194118}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 04f84fc2003509a5e7e068ec1271cc40, type: 3}
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
@@ -646,7 +646,7 @@ MonoBehaviour:
m_GameObject: {fileID: 1408985297194118}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 598ca59b26b303be9752bcc87e36626e, type: 3}
m_Script: {fileID: 11500000, guid: e19747de3f5aca642ab2be37e372fb86, type: 3}
m_Name:
m_EditorClassIdentifier:
m_EffectColor: {r: 0.4901961, g: 0.2980392, b: 0.1254902, a: 1}
+19 -5
View File
@@ -32,6 +32,18 @@ namespace Assets.MyGame.Scripts.Net
public bool isLoggingOut = false;
/// <summary>每个 socketType 正在运行的重连协程引用,用于主动 StopCoroutine</summary>
private readonly Dictionary<SocketType, Coroutine> reconnectCoroutines = new();
/// <summary>重连状态变化事件(type=哪个 socket;true=开始自动重连 / false=重连结束-成功或取消)。
/// 界面(如游戏面板的 Hl_WaitTip"正在连接服务器"提示)据此显隐;与重连生命周期严格一致。</summary>
public static event Action<SocketType, bool> OnReconnectingChanged;
/// <summary>统一维护重连集合并广播变化:reconnecting 的所有 Add/Remove 入口都走这里,避免漏发事件</summary>
private bool SetReconnecting(SocketType type, bool value)
{
bool changed = value ? reconnecting.Add(type) : reconnecting.Remove(type);
if (changed) OnReconnectingChanged?.Invoke(type, value);
return changed;
}
private float nextHeartbeatTime;
private const float HeartbeatIntervalSeconds = 20f;
#if NewIP
@@ -137,7 +149,7 @@ namespace Assets.MyGame.Scripts.Net
#endif
reconnecting.Remove(type);
SetReconnecting(type, false);
handshakeCompleted.Remove(type);
// SignalR 握手完成前不能发送 Bind、JoinRoom 等 Hub 调用。
web.Send("{\"protocol\":\"json\",\"version\":1}\u001e");
@@ -289,7 +301,7 @@ namespace Assets.MyGame.Scripts.Net
/// </summary>
private void StartReconnect(SocketType type, Action action = null)
{
if (!reconnecting.Add(type))
if (!SetReconnecting(type, true))
return;
var co = StartCoroutine(Reconnect(type, action));
reconnectCoroutines[type] = co;
@@ -307,7 +319,9 @@ namespace Assets.MyGame.Scripts.Net
StopCoroutine(kv.Value);
}
reconnectCoroutines.Clear();
reconnecting.Clear();
// 逐个触发"重连取消",界面等待提示能同步收起
foreach (var type in new List<SocketType>(reconnecting))
SetReconnecting(type, false);
}
private System.Collections.IEnumerator Reconnect(SocketType type, Action action = null)
@@ -320,14 +334,14 @@ namespace Assets.MyGame.Scripts.Net
yield return new WaitForSeconds(3f);
if (manualClosing.Contains(type))
{
reconnecting.Remove(type);
SetReconnecting(type, false);
reconnectCoroutines.Remove(type);
yield break;
}
// ⭐ 登出中或未登录:取消已排队等待的重连
if (isLoggingOut || GameManager.Instance.user == null)
{
reconnecting.Remove(type);
SetReconnecting(type, false);
reconnectCoroutines.Remove(type);
yield break;
}
@@ -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;
// 列表数据改为与"帮助-图鉴"同一份数据源动态读取:
Binary file not shown.
+27
View File
@@ -0,0 +1,27 @@
fileFormatVersion: 2
guid: 918aa0f6fb1af364987ba2befc5aabf5
timeCreated: 1766415515
licenseType: Free
TrueTypeFontImporter:
serializedVersion: 4
externalObjects: {}
fontSize: 16
forceTextureCase: -2
characterSpacing: 0
characterPadding: 1
includeFontData: 1
fontName: FZCuYuan-M03S
fontNames:
- FZCuYuan-M03S
fallbackFontReferences:
- {fileID: 0}
customCharacters:
fontRenderingMode: 0
output:
hasEmptyFontData: 0
ascentCalculationMode: 1
useLegacyBoundsCalculation: 0
shouldRoundAdvanceValue: 1
userData:
assetBundleName: assets_bundles_hall_commonfont_fzy4k_ttf
assetBundleVariant:
+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 6ba9d547b2e367c449ab17667a01778e
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 8e749fc87c3e18a439dd8aed5dcdca4d
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,29 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 6
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: xdt_denglujiazai
m_Shader: {fileID: 203, guid: 0000000000000000f000000000000000, type: 0}
m_ShaderKeywords:
m_LightmapFlags: 5
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
_MainTex:
m_Texture: {fileID: 2800000, guid: c96dd13080d46ff4fa611b6da2ac28de, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Floats:
_InvFade: 1
m_Colors:
_TintColor: {r: 0.5, g: 0.5, b: 0.5, a: 0.5}
@@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: f11991dcf3125ae44b6ab7e2bd87b62d
timeCreated: 1766415501
licenseType: Free
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
userData:
assetBundleName: hall_effect_material
assetBundleVariant:
+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 9b888a6463f0b854787bb0ccfb17bbb7
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

@@ -0,0 +1,112 @@
fileFormatVersion: 2
guid: c96dd13080d46ff4fa611b6da2ac28de
timeCreated: 1766415478
licenseType: Free
TextureImporter:
serializedVersion: 11
internalIDToNameTable: []
externalObjects: {}
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 0
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 4
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapW: 0
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 0
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 0
textureShape: 1
singleChannelComponent: 0
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 2
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spritePackingTag:
output:
textureImportInstructions:
compressedFormat: 0
uncompressedFormat: 0
desiredFormat: 0
usageMode: 0
colorSpace: 0
androidETC2FallbackFormat: 0
width: 0
height: 0
compressionQuality: 0
androidETC2FallbackDownscale: 0
sourceTextureInformation:
width: 0
height: 0
doesTextureContainAlpha: 0
sourceWasHDR: 0
importInspectorWarnings:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName: hall_effect_texture
assetBundleVariant:
+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 80b07504e34eea54ba457f37770e932e
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 0198f7420b35032488072b4c86109f92
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 23a588312e9d1f041bc1a7facc1f949c
timeCreated: 1766415498
licenseType: Free
PrefabImporter:
externalObjects: {}
addedObjectFileIDs:
isPrefabVariant: 0
unableToImportOnPreviousDomainReload: 0
userData:
assetBundleName: hall_prefab
assetBundleVariant: