diff --git a/Assets/Art/FengLei/UI/Anim_BaoJiang/UI_baojiang.controller b/Assets/Art/FengLei/UI/Anim_BaoJiang/UI_baojiang.controller
index 5998ae5dd..a41912903 100644
--- a/Assets/Art/FengLei/UI/Anim_BaoJiang/UI_baojiang.controller
+++ b/Assets/Art/FengLei/UI/Anim_BaoJiang/UI_baojiang.controller
@@ -1,5 +1,53 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
+--- !u!1101 &-7087220483249332510
+AnimatorStateTransition:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name:
+ m_Conditions: []
+ m_DstStateMachine: {fileID: 0}
+ m_DstState: {fileID: -1091054516175329715}
+ m_Solo: 0
+ m_Mute: 0
+ m_IsExit: 0
+ serializedVersion: 3
+ m_TransitionDuration: 0.25
+ m_TransitionOffset: 0
+ m_ExitTime: 0.39999998
+ m_HasExitTime: 1
+ m_HasFixedDuration: 1
+ m_InterruptionSource: 0
+ m_OrderedInterruption: 1
+ m_CanTransitionToSelf: 1
+--- !u!1102 &-1091054516175329715
+AnimatorState:
+ serializedVersion: 6
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: UI_baojiang_idle
+ m_Speed: 1
+ m_CycleOffset: 0
+ m_Transitions: []
+ m_StateMachineBehaviours: []
+ m_Position: {x: 50, y: 50, z: 0}
+ m_IKOnFeet: 0
+ m_WriteDefaultValues: 1
+ m_Mirror: 0
+ m_SpeedParameterActive: 0
+ m_MirrorParameterActive: 0
+ m_CycleOffsetParameterActive: 0
+ m_TimeParameterActive: 0
+ m_Motion: {fileID: 7400000, guid: 5469d2a672cc5fd4287aebb88e24b5f4, type: 2}
+ m_Tag:
+ m_SpeedParameter:
+ m_MirrorParameter:
+ m_CycleOffsetParameter:
+ m_TimeParameter:
--- !u!91 &9100000
AnimatorController:
m_ObjectHideFlags: 0
@@ -8,7 +56,25 @@ AnimatorController:
m_PrefabAsset: {fileID: 0}
m_Name: UI_baojiang
serializedVersion: 5
- m_AnimatorParameters: []
+ m_AnimatorParameters:
+ - m_Name: Appear
+ m_Type: 9
+ m_DefaultFloat: 0
+ m_DefaultInt: 0
+ m_DefaultBool: 0
+ m_Controller: {fileID: 9100000}
+ - m_Name: Loop
+ m_Type: 9
+ m_DefaultFloat: 0
+ m_DefaultInt: 0
+ m_DefaultBool: 0
+ m_Controller: {fileID: 9100000}
+ - m_Name: Close
+ m_Type: 9
+ m_DefaultFloat: 0
+ m_DefaultInt: 0
+ m_DefaultBool: 0
+ m_Controller: {fileID: 9100000}
m_AnimatorLayers:
- serializedVersion: 5
m_Name: Base Layer
@@ -32,7 +98,8 @@ AnimatorState:
m_Name: UI_baojiang
m_Speed: 1
m_CycleOffset: 0
- m_Transitions: []
+ m_Transitions:
+ - {fileID: -7087220483249332510}
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
@@ -48,6 +115,79 @@ AnimatorState:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
+--- !u!1102 &3012551385725208710
+AnimatorState:
+ serializedVersion: 6
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: UI_baojiang_leave
+ m_Speed: 1
+ m_CycleOffset: 0
+ m_Transitions: []
+ m_StateMachineBehaviours: []
+ m_Position: {x: 50, y: 50, z: 0}
+ m_IKOnFeet: 0
+ m_WriteDefaultValues: 1
+ m_Mirror: 0
+ m_SpeedParameterActive: 0
+ m_MirrorParameterActive: 0
+ m_CycleOffsetParameterActive: 0
+ m_TimeParameterActive: 0
+ m_Motion: {fileID: 7400000, guid: 38734011404d5b84bb7dad182224992a, type: 2}
+ m_Tag:
+ m_SpeedParameter:
+ m_MirrorParameter:
+ m_CycleOffsetParameter:
+ m_TimeParameter:
+--- !u!1101 &3151175118646390328
+AnimatorStateTransition:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name:
+ m_Conditions: []
+ m_DstStateMachine: {fileID: 0}
+ m_DstState: {fileID: 188125840054780768}
+ m_Solo: 0
+ m_Mute: 0
+ m_IsExit: 0
+ serializedVersion: 3
+ m_TransitionDuration: 0.25
+ m_TransitionOffset: 0
+ m_ExitTime: 0.75
+ m_HasExitTime: 0
+ m_HasFixedDuration: 1
+ m_InterruptionSource: 0
+ m_OrderedInterruption: 1
+ m_CanTransitionToSelf: 1
+--- !u!1101 &5080916787463449845
+AnimatorStateTransition:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name:
+ m_Conditions:
+ - m_ConditionMode: 1
+ m_ConditionEvent: Loop
+ m_EventTreshold: 0
+ m_DstStateMachine: {fileID: 0}
+ m_DstState: {fileID: -1091054516175329715}
+ m_Solo: 0
+ m_Mute: 0
+ m_IsExit: 0
+ serializedVersion: 3
+ m_TransitionDuration: 0.25
+ m_TransitionOffset: 0
+ m_ExitTime: 0.75
+ m_HasExitTime: 0
+ m_HasFixedDuration: 1
+ m_InterruptionSource: 0
+ m_OrderedInterruption: 1
+ m_CanTransitionToSelf: 1
--- !u!1107 &6641203575115228107
AnimatorStateMachine:
serializedVersion: 6
@@ -59,14 +199,48 @@ AnimatorStateMachine:
m_ChildStates:
- serializedVersion: 1
m_State: {fileID: 188125840054780768}
- m_Position: {x: 0, y: 370, z: 0}
+ m_Position: {x: 330, y: 130, z: 0}
+ - serializedVersion: 1
+ m_State: {fileID: -1091054516175329715}
+ m_Position: {x: 260, y: 320, z: 0}
+ - serializedVersion: 1
+ m_State: {fileID: 3012551385725208710}
+ m_Position: {x: 170, y: 520, z: 0}
m_ChildStateMachines: []
- m_AnyStateTransitions: []
+ m_AnyStateTransitions:
+ - {fileID: 5080916787463449845}
+ - {fileID: 7114718272761430631}
+ - {fileID: 3151175118646390328}
m_EntryTransitions: []
m_StateMachineTransitions: {}
m_StateMachineBehaviours: []
m_AnyStatePosition: {x: 50, y: 20, z: 0}
- m_EntryPosition: {x: 50, y: 120, z: 0}
+ m_EntryPosition: {x: -40, y: 150, z: 0}
m_ExitPosition: {x: 800, y: 120, z: 0}
m_ParentStateMachinePosition: {x: 800, y: 20, z: 0}
m_DefaultState: {fileID: 188125840054780768}
+--- !u!1101 &7114718272761430631
+AnimatorStateTransition:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name:
+ m_Conditions:
+ - m_ConditionMode: 1
+ m_ConditionEvent: Close
+ m_EventTreshold: 0
+ m_DstStateMachine: {fileID: 0}
+ m_DstState: {fileID: 3012551385725208710}
+ m_Solo: 0
+ m_Mute: 0
+ m_IsExit: 0
+ serializedVersion: 3
+ m_TransitionDuration: 0.25
+ m_TransitionOffset: 0
+ m_ExitTime: 0.75
+ m_HasExitTime: 0
+ m_HasFixedDuration: 1
+ m_InterruptionSource: 0
+ m_OrderedInterruption: 1
+ m_CanTransitionToSelf: 1
diff --git a/Assets/Art/FengLei/UI/Anim_BaoJiang/UI_baojiang_idle.anim b/Assets/Art/FengLei/UI/Anim_BaoJiang/UI_baojiang_idle.anim
index 97f0de53e..0b6eefa7b 100644
--- a/Assets/Art/FengLei/UI/Anim_BaoJiang/UI_baojiang_idle.anim
+++ b/Assets/Art/FengLei/UI/Anim_BaoJiang/UI_baojiang_idle.anim
@@ -18,63 +18,63 @@ AnimationClip:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
- time: 0.23333333
+ time: 0
value: {x: 0, y: 0, z: 0}
inSlope: {x: 0, y: 0, z: 0}
- outSlope: {x: 0, y: 0, z: 57.272724}
+ outSlope: {x: 0, y: 0, z: 114.54545}
tangentMode: 0
weightedMode: 0
inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
- serializedVersion: 3
- time: 0.6
+ time: 0.18333334
value: {x: 0, y: 0, z: 21}
- inSlope: {x: 0, y: 0, z: 57.272724}
+ inSlope: {x: 0, y: 0, z: 114.54545}
outSlope: {x: 0, y: 0, z: -57.272724}
tangentMode: 0
weightedMode: 0
inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
- serializedVersion: 3
- time: 1.3333334
+ time: 0.9166667
value: {x: 0, y: 0, z: -21}
- inSlope: {x: -0, y: -0, z: -57.272724}
- outSlope: {x: 0, y: 0, z: 60.000015}
+ inSlope: {x: 0, y: 0, z: -57.272724}
+ outSlope: {x: 0, y: 0, z: 60.000008}
tangentMode: 0
weightedMode: 0
inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
- serializedVersion: 3
- time: 1.6833333
+ time: 1.2666667
value: {x: 0, y: 0, z: 0}
- inSlope: {x: 0, y: 0, z: 60.000015}
+ inSlope: {x: 0, y: 0, z: 60.000008}
outSlope: {x: 0, y: 0, z: 84}
tangentMode: 0
weightedMode: 0
inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
- serializedVersion: 3
- time: 1.9333333
+ time: 1.5166667
value: {x: 0, y: 0, z: 21}
inSlope: {x: 0, y: 0, z: 84}
- outSlope: {x: 0, y: 0, z: -81.290306}
+ outSlope: {x: 0, y: 0, z: -81.29032}
tangentMode: 0
weightedMode: 0
inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
- serializedVersion: 3
- time: 2.45
+ time: 2.0333333
value: {x: 0, y: 0, z: -21}
- inSlope: {x: -0, y: -0, z: -81.290306}
- outSlope: {x: 0, y: 0, z: 57.272743}
+ inSlope: {x: -0, y: -0, z: -81.29032}
+ outSlope: {x: 0, y: 0, z: 66.3158}
tangentMode: 0
weightedMode: 0
inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
- serializedVersion: 3
- time: 2.8166666
+ time: 2.35
value: {x: 0, y: 0, z: 0}
- inSlope: {x: 0, y: 0, z: 57.272743}
+ inSlope: {x: 0, y: 0, z: 66.3158}
outSlope: {x: 0, y: 0, z: 0}
tangentMode: 0
weightedMode: 0
@@ -91,15 +91,6 @@ AnimationClip:
m_Curve:
- serializedVersion: 3
time: 0
- value: {x: 0, y: 0, z: 0}
- inSlope: {x: 0, y: 0, z: 0}
- outSlope: {x: 0, y: 0, z: 0}
- tangentMode: 0
- weightedMode: 0
- inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
- outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
- - serializedVersion: 3
- time: 0.41666666
value: {x: 1, y: 1, z: 1}
inSlope: {x: 0, y: 0, z: 0}
outSlope: {x: 0, y: 0, z: 0}
@@ -108,7 +99,7 @@ AnimationClip:
inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
- serializedVersion: 3
- time: 2.6333334
+ time: 2.35
value: {x: 1, y: 1, z: 1}
inSlope: {x: 0, y: 0, z: 0}
outSlope: {x: 0, y: 0, z: 0}
@@ -116,15 +107,6 @@ AnimationClip:
weightedMode: 0
inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
- - serializedVersion: 3
- time: 3
- value: {x: 0, y: 0, z: 0}
- inSlope: {x: 0, y: 0, z: 0}
- outSlope: {x: 0, y: 0, z: 0}
- tangentMode: 0
- weightedMode: 0
- inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
- outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
@@ -162,7 +144,7 @@ AnimationClip:
m_AdditiveReferencePoseClip: {fileID: 0}
m_AdditiveReferencePoseTime: 0
m_StartTime: 0
- m_StopTime: 3
+ m_StopTime: 2.35
m_OrientationOffsetY: 0
m_Level: 0
m_CycleOffset: 0
@@ -183,16 +165,7 @@ AnimationClip:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
- time: 0.23333333
- value: 0
- inSlope: 0
- outSlope: 0
- tangentMode: 69
- weightedMode: 0
- inWeight: 0.33333334
- outWeight: 0.33333334
- - serializedVersion: 3
- time: 1.3333334
+ time: 0.9166667
value: 0
inSlope: -0
outSlope: 0
@@ -201,7 +174,7 @@ AnimationClip:
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
- time: 2.45
+ time: 2.0333333
value: 0
inSlope: -0
outSlope: 0
@@ -222,16 +195,7 @@ AnimationClip:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
- time: 0.23333333
- value: 0
- inSlope: 0
- outSlope: 0
- tangentMode: 69
- weightedMode: 0
- inWeight: 0.33333334
- outWeight: 0.33333334
- - serializedVersion: 3
- time: 1.3333334
+ time: 0.9166667
value: 0
inSlope: -0
outSlope: 0
@@ -240,7 +204,7 @@ AnimationClip:
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
- time: 2.45
+ time: 2.0333333
value: 0
inSlope: -0
outSlope: 0
@@ -261,63 +225,63 @@ AnimationClip:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
- time: 0.23333333
+ time: 0
value: 0
inSlope: 0
- outSlope: 57.272724
+ outSlope: 114.54545
tangentMode: 69
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
- time: 0.6
+ time: 0.18333334
value: 21
- inSlope: 57.272724
+ inSlope: 114.54545
outSlope: -57.272724
tangentMode: 69
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
- time: 1.3333334
+ time: 0.9166667
value: -21
inSlope: -57.272724
- outSlope: 60.000015
+ outSlope: 60.000008
tangentMode: 69
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
- time: 1.6833333
+ time: 1.2666667
value: 0
- inSlope: 60.000015
+ inSlope: 60.000008
outSlope: 84
tangentMode: 69
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
- time: 1.9333333
+ time: 1.5166667
value: 21
inSlope: 84
- outSlope: -81.290306
+ outSlope: -81.29032
tangentMode: 69
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
- time: 2.45
+ time: 2.0333333
value: -21
- inSlope: -81.290306
- outSlope: 57.272743
+ inSlope: -81.29032
+ outSlope: 66.3158
tangentMode: 69
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
- time: 2.8166666
+ time: 2.35
value: 0
- inSlope: 57.272743
+ inSlope: 66.3158
outSlope: 0
tangentMode: 69
weightedMode: 0
@@ -337,37 +301,19 @@ AnimationClip:
m_Curve:
- serializedVersion: 3
time: 0
- value: 0
- inSlope: 0
- outSlope: 0
- tangentMode: 136
- weightedMode: 0
- inWeight: 0.33333334
- outWeight: 0.33333334
- - serializedVersion: 3
- time: 0.41666666
value: 1
inSlope: 0
outSlope: 0
- tangentMode: 136
+ tangentMode: 65
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
- time: 2.6333334
+ time: 2.35
value: 1
inSlope: 0
outSlope: 0
- tangentMode: 136
- weightedMode: 0
- inWeight: 0.33333334
- outWeight: 0.33333334
- - serializedVersion: 3
- time: 3
- value: 0
- inSlope: 0
- outSlope: 0
- tangentMode: 136
+ tangentMode: 65
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
@@ -385,37 +331,19 @@ AnimationClip:
m_Curve:
- serializedVersion: 3
time: 0
- value: 0
- inSlope: 0
- outSlope: 0
- tangentMode: 136
- weightedMode: 0
- inWeight: 0.33333334
- outWeight: 0.33333334
- - serializedVersion: 3
- time: 0.41666666
value: 1
inSlope: 0
outSlope: 0
- tangentMode: 136
+ tangentMode: 65
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
- time: 2.6333334
+ time: 2.35
value: 1
inSlope: 0
outSlope: 0
- tangentMode: 136
- weightedMode: 0
- inWeight: 0.33333334
- outWeight: 0.33333334
- - serializedVersion: 3
- time: 3
- value: 0
- inSlope: 0
- outSlope: 0
- tangentMode: 136
+ tangentMode: 65
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
@@ -433,37 +361,19 @@ AnimationClip:
m_Curve:
- serializedVersion: 3
time: 0
- value: 0
- inSlope: 0
- outSlope: 0
- tangentMode: 136
- weightedMode: 0
- inWeight: 0.33333334
- outWeight: 0.33333334
- - serializedVersion: 3
- time: 0.41666666
value: 1
inSlope: 0
outSlope: 0
- tangentMode: 136
+ tangentMode: 65
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
- time: 2.6333334
+ time: 2.35
value: 1
inSlope: 0
outSlope: 0
- tangentMode: 136
- weightedMode: 0
- inWeight: 0.33333334
- outWeight: 0.33333334
- - serializedVersion: 3
- time: 3
- value: 0
- inSlope: 0
- outSlope: 0
- tangentMode: 136
+ tangentMode: 65
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
diff --git a/Assets/Art/FengLei/UI/Anim_BaoJiang/UI_baojiang_leave.anim b/Assets/Art/FengLei/UI/Anim_BaoJiang/UI_baojiang_leave.anim
index 3dfcab100..8d06d3460 100644
--- a/Assets/Art/FengLei/UI/Anim_BaoJiang/UI_baojiang_leave.anim
+++ b/Assets/Art/FengLei/UI/Anim_BaoJiang/UI_baojiang_leave.anim
@@ -18,7 +18,7 @@ AnimationClip:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
- time: 0.16666667
+ time: 0.25
value: {x: 0, y: 0, z: 0}
inSlope: {x: 0, y: 0, z: 57.272743}
outSlope: {x: 0, y: 0, z: 0}
@@ -36,7 +36,7 @@ AnimationClip:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
- time: 0
+ time: 0.083333336
value: {x: 1, y: 1, z: 1}
inSlope: {x: 0, y: 0, z: 0}
outSlope: {x: 0, y: 0, z: 0}
@@ -45,7 +45,7 @@ AnimationClip:
inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
- serializedVersion: 3
- time: 0.35
+ time: 0.43333334
value: {x: 0, y: 0, z: 0}
inSlope: {x: 0, y: 0, z: 0}
outSlope: {x: 0, y: 0, z: 0}
@@ -90,7 +90,7 @@ AnimationClip:
m_AdditiveReferencePoseClip: {fileID: 0}
m_AdditiveReferencePoseTime: 0
m_StartTime: 0
- m_StopTime: 0.35
+ m_StopTime: 0.43333334
m_OrientationOffsetY: 0
m_Level: 0
m_CycleOffset: 0
@@ -111,7 +111,7 @@ AnimationClip:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
- time: 0.16666667
+ time: 0.25
value: 0
inSlope: 57.272743
outSlope: 0
@@ -132,7 +132,7 @@ AnimationClip:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
- time: 0
+ time: 0.083333336
value: 1
inSlope: 0
outSlope: 0
@@ -141,7 +141,7 @@ AnimationClip:
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
- time: 0.35
+ time: 0.43333334
value: 0
inSlope: 0
outSlope: 0
@@ -162,7 +162,7 @@ AnimationClip:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
- time: 0
+ time: 0.083333336
value: 1
inSlope: 0
outSlope: 0
@@ -171,7 +171,7 @@ AnimationClip:
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
- time: 0.35
+ time: 0.43333334
value: 0
inSlope: 0
outSlope: 0
@@ -192,7 +192,7 @@ AnimationClip:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
- time: 0
+ time: 0.083333336
value: 1
inSlope: 0
outSlope: 0
@@ -201,7 +201,7 @@ AnimationClip:
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
- time: 0.35
+ time: 0.43333334
value: 0
inSlope: 0
outSlope: 0
diff --git a/Assets/Art/FengLei/UI/Anim_BaoJiang/爆奖中_.png b/Assets/Art/FengLei/UI/Anim_BaoJiang/爆奖中_.png
new file mode 100644
index 000000000..7139b0a0f
Binary files /dev/null and b/Assets/Art/FengLei/UI/Anim_BaoJiang/爆奖中_.png differ
diff --git a/Assets/Art/FengLei/UI/Anim_BaoJiang/爆奖中_.png.meta b/Assets/Art/FengLei/UI/Anim_BaoJiang/爆奖中_.png.meta
new file mode 100644
index 000000000..4e4860cc2
--- /dev/null
+++ b/Assets/Art/FengLei/UI/Anim_BaoJiang/爆奖中_.png.meta
@@ -0,0 +1,153 @@
+fileFormatVersion: 2
+guid: 33d407ecd9f681c41a44162e3ad963e1
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ 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
+ flipGreenChannel: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ 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: 8
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 3
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 3
+ buildTarget: iPhone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 3
+ buildTarget: WebGL
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 3
+ buildTarget: Android
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Framework/Event/ConstEventString.cs b/Assets/Framework/Event/ConstEventString.cs
index 3cdcea560..7b2a654ae 100644
--- a/Assets/Framework/Event/ConstEventString.cs
+++ b/Assets/Framework/Event/ConstEventString.cs
@@ -13,6 +13,8 @@ public class ConstEventString
public const string SyncGameData_ChangeWing = "SyncGameData_ChangeWing";
public const string SyncGameData_BotFireAngle = "SyncGameData_BotFireAngle";
// SyncGameData_RequestSyncFish 已废弃:鱼同步改由服务端 OnFishSpawn(type=sync) 下发
+ /// 爆奖结束帧同步(baoJiangEnd):某玩家爆奖流程完成,其他客户端显示最终 BJEndUI 并加分
+ public const string BaoJiangEnd = "BaoJiangEnd";
// ================================================================
// 服务端 → 客户端事件 (新协议)
diff --git a/Assets/MyGame/Scenes/UIScene.unity b/Assets/MyGame/Scenes/UIScene.unity
index 94838dee7..182aa0dae 100644
--- a/Assets/MyGame/Scenes/UIScene.unity
+++ b/Assets/MyGame/Scenes/UIScene.unity
@@ -908,7 +908,7 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 22400762, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
propertyPath: m_AnchoredPosition.y
- value: -0.000015258789
+ value: -0.0000038146973
objectReference: {fileID: 0}
- target: {fileID: 22426080, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
propertyPath: m_AnchorMax.x
@@ -6006,6 +6006,7 @@ MonoBehaviour:
showWaitingAfterExit: 1
useRemoteBotConfig: 0
enableLogFile: 1
+ useNotSelfBaoJiangMode: 1
gameConfig:
id:
isDelete: 0
diff --git a/Assets/MyGame/Scripts/Characters/Monster/MonsterControl_BossBase.cs b/Assets/MyGame/Scripts/Characters/Monster/MonsterControl_BossBase.cs
index 08a0da4d7..4a1574d60 100644
--- a/Assets/MyGame/Scripts/Characters/Monster/MonsterControl_BossBase.cs
+++ b/Assets/MyGame/Scripts/Characters/Monster/MonsterControl_BossBase.cs
@@ -308,6 +308,11 @@ public class MonsterControl_BossBase : MonsterContral
{
yield return new WaitForSeconds(dieTime);
+ // not-self 爆奖模式下未实例化分数面板和 effect_DieAward,跳过飞分逻辑
+ // (加分由 BaoJiangNotSelfHandler.OnBaoJiangEnd 处理)
+ if (tMP_CurrBossScore == null || tMP_CurrBossScore.transform.parent == null)
+ yield break;
+
tMP_CurrBossScore.transform.parent
.DOMove(v3, 0.5f)
.OnComplete(() =>
diff --git a/Assets/MyGame/Scripts/Manager/CreateFishManager.cs b/Assets/MyGame/Scripts/Manager/CreateFishManager.cs
index 956503d53..7d2f6f1b6 100644
--- a/Assets/MyGame/Scripts/Manager/CreateFishManager.cs
+++ b/Assets/MyGame/Scripts/Manager/CreateFishManager.cs
@@ -1563,6 +1563,28 @@ public class CreateFishManager : MonoSingleton
// Boss 鱼:显示浮动分数文本
var bossCtrl = (MonsterControl_BossBase)monster;
+ // ⭐ not-self 分流:非自己击杀(含机器人)且开启新模式 → 走 not-self 流程
+ // 不克隆 effect_DieAward,在 killer 座位显示 img_BaoJiangZhong,
+ // 等待帧同步 baoJiangEnd(机器人由房主延迟 5~10 秒代发)后显示最终 BJEndUI + 加分
+ bool isSelfKill_Boss = sitData.user == GameManager.Instance.user.id;
+ if (GameManager.Instance.useNotSelfBaoJiangMode
+ && !isSelfKill_Boss
+ && monster.effect_DieAward != null
+ && BaoJiangNotSelfHandler.ShowInProgress(
+ sitData,
+ monster.effect_DieAward,
+ killFish.fishId,
+ killFish.userId,
+ killFish.beishu,
+ gold: killFish.gold,
+ onScoreAdd: onScoreAdd))
+ {
+ // Boss 死亡仍走 DieFish(处理死亡音效/震屏等),但不播爆奖特效
+ monster.DieFish(killFish);
+ dieFishCalled = true;
+ break;
+ }
+
bossCtrl.v3 = sitData.transform.position;
bossCtrl.JiaFen = onScoreAdd; // 先设置 JiaFen,DieFish 的 lambda 才能捕获到
bossCtrl.isLocalCoin = sitData.user == GameManager.Instance.user.id; // ⭐ 金/银区分
@@ -1621,6 +1643,40 @@ public class CreateFishManager : MonoSingleton
break;
case FishTypeEnum.特殊鱼:
{
+ // ⭐ not-self + Boss爆奖模式分流:不克隆 effect_DieAward,只读取预制体上的 BJEndUI
+ // 在 killer 座位 obj_BaoJiangZhongPanelPosition 显示 img_BaoJiangZhong(关 tMP_beishu)
+ // 等待帧同步 baoJiangEnd 后再走最终 BJEndUI 效果 + 加分
+ // 开关:GameManager.useNotSelfBaoJiangMode(false=旧模式,所有玩家走相同流程)
+ // ⚠️ 排除重写了 SetCoinCount 的子类(如炸弹蟹 HHWK_ZDX_DieEvent):
+ // 这些鱼有特殊爆炸/范围杀鱼玩法,必须走原流程,不能跳过 SetCoinCount
+ bool isSelfKill_TSY = sitData.user == GameManager.Instance.user.id;
+ if (GameManager.Instance.useNotSelfBaoJiangMode
+ && !isSelfKill_TSY
+ && monster.effect_DieAward != null)
+ {
+ var tsyPrefab = monster.effect_DieAward.GetComponent();
+ if (tsyPrefab != null && tsyPrefab.baoJiangMode == TSYBaoJiangMode.Boss爆奖)
+ {
+ // 检查子类是否重写了 SetCoinCount(炸弹蟹等有特殊爆炸玩法的鱼不走 not-self 分流)
+ var setCoinMethod = tsyPrefab.GetType().GetMethod("SetCoinCount");
+ bool hasCustomSetCoinCount = setCoinMethod != null
+ && setCoinMethod.DeclaringType != typeof(DieEffect_TSY);
+
+ if (!hasCustomSetCoinCount
+ && BaoJiangNotSelfHandler.ShowInProgress(
+ sitData,
+ monster.effect_DieAward,
+ killFish.fishId,
+ killFish.userId,
+ killFish.beishu,
+ gold: killFish.gold,
+ onScoreAdd: onScoreAdd))
+ {
+ break;
+ }
+ }
+ }
+
// 普通鱼:金币飞向炮台
var award = Instantiate(
monster.effect_DieAward != null ? monster.effect_DieAward : dieFXPrefabAward);
@@ -1660,6 +1716,9 @@ public class CreateFishManager : MonoSingleton
tsy.isLocalCoin = sitData.user == GameManager.Instance.user.id;
tsy.monster = monster;
tsy.coinCount = killFish.gold;
+ // 统一注入击杀者座位信息(posID/paoBei 供 GetSeatPosition/范围杀鱼金币计算使用)
+ tsy.posID = sitData.posID;
+ tsy.paoBei = (int)sitData.consumeGoldNum;
if (tsy.baoJiangMode == TSYBaoJiangMode.Boss爆奖)
{
@@ -1700,6 +1759,26 @@ public class CreateFishManager : MonoSingleton
// Boss 鱼:显示浮动分数文本
var bossCtrl = (MonsterControl_BossBase)monster;
+ // ⭐ not-self 分流:非自己击杀(含机器人)且开启新模式 → 走 not-self 流程
+ bool isSelfKill_TBoss = sitData.user == GameManager.Instance.user.id;
+ if (GameManager.Instance.useNotSelfBaoJiangMode
+ && !isSelfKill_TBoss
+ && monster.effect_DieAward != null
+ && BaoJiangNotSelfHandler.ShowInProgress(
+ sitData,
+ monster.effect_DieAward,
+ killFish.fishId,
+ killFish.userId,
+ killFish.beishu,
+ gold: killFish.gold,
+ onScoreAdd: onScoreAdd))
+ {
+ // Boss 死亡仍走 DieFish(处理死亡音效/震屏等),但不播爆奖特效
+ monster.DieFish(killFish);
+ dieFishCalled = true;
+ break;
+ }
+
bossCtrl.v3 = sitData.transform.position;
bossCtrl.JiaFen = onScoreAdd; // 先设置 JiaFen
bossCtrl.isLocalCoin = sitData.user == GameManager.Instance.user.id; // ⭐ 金/银区分
diff --git a/Assets/MyGame/Scripts/Manager/GameManager.cs b/Assets/MyGame/Scripts/Manager/GameManager.cs
index 379ffb6af..9365b0101 100644
--- a/Assets/MyGame/Scripts/Manager/GameManager.cs
+++ b/Assets/MyGame/Scripts/Manager/GameManager.cs
@@ -27,6 +27,10 @@ public class GameManager : MonoSingleton
[Tooltip("运行时开关:是否实际生成日志文件。需要同时启用 ENABLE_LOG_FILE 预编译指令才生效。\ntrue=生成日志文件;false=不生成(运行时关闭)")]
public bool enableLogFile = true;
+ [Header("爆奖模式")]
+ [Tooltip("其他玩家爆奖处理方式。\ntrue=新模式(not-self 分流:座位显示 img_BaoJiangZhong,等待帧同步 baoJiangEnd 后再显示最终 BJEndUI 加分);\nfalse=旧模式(所有玩家走相同流程,直接克隆 effect_DieAward 播完整特效)")]
+ public bool useNotSelfBaoJiangMode = false;
+
public GameConfig gameConfig;
public ActivityConfig activityConfig;
public Dictionary dic_fishTypeConfigs = new Dictionary();
diff --git a/Assets/MyGame/Scripts/Net/APIManager.cs b/Assets/MyGame/Scripts/Net/APIManager.cs
index 860551195..bb8965b6e 100644
--- a/Assets/MyGame/Scripts/Net/APIManager.cs
+++ b/Assets/MyGame/Scripts/Net/APIManager.cs
@@ -24,9 +24,9 @@ namespace Assets.MyGame.Scripts.Net
public const string baseURL = "http://47.109.132.12";
#else
- public const string baseURL = "http://47.109.132.12";
+ //public const string baseURL = "http://47.109.132.12";
- //public const string baseURL = "http://47.109.34.50";
+ public const string baseURL = "http://47.109.34.50";
#endif
diff --git a/Assets/MyGame/Scripts/Net/WebResponses/SyncGameData.cs b/Assets/MyGame/Scripts/Net/WebResponses/SyncGameData.cs
index a06a6743e..e4ee8e6c6 100644
--- a/Assets/MyGame/Scripts/Net/WebResponses/SyncGameData.cs
+++ b/Assets/MyGame/Scripts/Net/WebResponses/SyncGameData.cs
@@ -53,6 +53,8 @@ namespace Assets.MyGame.Scripts.Net.WebResponses
changeCannonMultiple=9,
changeWing=10,
// requestSyncFish=11 已废弃:鱼同步改由服务端 OnFishSpawn(type=sync) 事件下发
+ /// 爆奖结束:某玩家爆奖流程完成,广播给其他客户端显示最终 BJEndUI 并加分
+ baoJiangEnd=12,
}
[Serializable]
public class FireCannonSendData
@@ -145,6 +147,25 @@ namespace Assets.MyGame.Scripts.Net.WebResponses
public int cannonMultiple;
}
+ ///
+ /// 爆奖结束帧数据(frameType=baoJiangEnd)。
+ /// 服务端在玩家爆奖流程完成时广播,其他客户端据此显示最终 BJEndUI 并加分。
+ ///
+ [Serializable]
+ public class FrameData_BaoJiangEnd : FrameData
+ {
+ /// 爆奖玩家 ID
+ public string userId;
+ /// 击杀者座位 ID
+ public int posID;
+ /// 死亡的鱼 ID(用于匹配 pending 的 not-self 爆奖)
+ public string fishId;
+ /// 最终倍数
+ public int beishu;
+ /// 最终得分(金币)
+ public int score;
+ }
+
// ================================================================
// OnFishSpawn 事件数据结构 (服务端出鱼,破坏性替代 createFish 帧同步)
// ================================================================
diff --git a/Assets/MyGame/Scripts/Net/WebSocketManager.cs b/Assets/MyGame/Scripts/Net/WebSocketManager.cs
index 75f16149a..de26b0808 100644
--- a/Assets/MyGame/Scripts/Net/WebSocketManager.cs
+++ b/Assets/MyGame/Scripts/Net/WebSocketManager.cs
@@ -38,9 +38,9 @@ namespace Assets.MyGame.Scripts.Net
private const string baseUrl = "ws://47.109.132.12";
#else
- private const string baseUrl = "ws://47.109.132.12";
+ //private const string baseUrl = "ws://47.109.132.12";
- //private const string baseUrl = "ws://47.109.34.50";
+ private const string baseUrl = "ws://47.109.34.50";
#endif
public bool isGame = false;
diff --git a/Assets/MyGame/Scripts/Net/WebSocketReponseList.cs b/Assets/MyGame/Scripts/Net/WebSocketReponseList.cs
index 66232da02..f03962fd9 100644
--- a/Assets/MyGame/Scripts/Net/WebSocketReponseList.cs
+++ b/Assets/MyGame/Scripts/Net/WebSocketReponseList.cs
@@ -302,6 +302,9 @@ namespace Assets.MyGame.Scripts.Net
EventCenter.Instance.EventTrigger(ConstEventString.SyncGameData_ChangeWing, syncGameData);
break;
// requestSyncFish=11 已废弃:鱼同步改由服务端 OnFishSpawn(type=sync) 下发
+ case FrameDataType.baoJiangEnd:
+ EventCenter.Instance.EventTrigger(ConstEventString.BaoJiangEnd, syncGameData);
+ break;
default:
break;
}
diff --git a/Assets/MyGame/Scripts/Turret/SitPosData.cs b/Assets/MyGame/Scripts/Turret/SitPosData.cs
index 7590613e7..4cda75211 100644
--- a/Assets/MyGame/Scripts/Turret/SitPosData.cs
+++ b/Assets/MyGame/Scripts/Turret/SitPosData.cs
@@ -17,7 +17,7 @@ public enum TurretControlMode
public class SitPosData : MonoBehaviour
{
public bool IsBaoJiangingActive;
- public GameObject obj_BaoJiangZhongPanel;
+ public Transform obj_BaoJiangZhongPanelPosition;
/// 本地玩家的座位引用(由游戏面板初始化时设置)
public static SitPosData localPlayerSit;
diff --git a/Assets/MyGame/aa/Game/FLZY/BOSS/BJEndUI.cs b/Assets/MyGame/aa/Game/FLZY/BOSS/BJEndUI.cs
index df7907a48..cd687cd91 100644
--- a/Assets/MyGame/aa/Game/FLZY/BOSS/BJEndUI.cs
+++ b/Assets/MyGame/aa/Game/FLZY/BOSS/BJEndUI.cs
@@ -3,6 +3,7 @@ using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
+using UnityEngine.UI;
public class BJEndUI : MonoBehaviour
{
@@ -10,12 +11,57 @@ public class BJEndUI : MonoBehaviour
public TextMeshProUGUI tMP_score;
public TMP_SpriteAsset goldSprite;
public TMP_SpriteAsset SilverSprite;
+ public Image img_BaoJiangZhong;
public bool useScoreAnim = false; // 是否启用分数递增动画
+ /// 默认自动销毁延时(秒);not-self 在途状态会取消此计时,等 Finalize 后才重启
+ public float autoDestroyDelay = 5f;
+
+ [Header("Animator 状态机触发参数(not-self 流程)")]
+ [Tooltip("出现动画的 Trigger 参数名(ShowInProgress 入口触发)")]
+ public string animTrigger_Appear = "Appear";
+ [Tooltip("持续动画的 Trigger 参数名(ShowInProgress 出现动画完成后触发)")]
+ public string animTrigger_Loop = "Loop";
+ [Tooltip("关闭动画的 Trigger 参数名(Finalize 时触发,播完后销毁)")]
+ public string animTrigger_Close = "Close";
+
+ private Coroutine _destroyCo;
+
+ /// 预制体自带的 Animator(出现/持续/关闭 三态由状态机控制)
+ private Animator _animator;
+
private void Awake()
{
- Destroy(gameObject, 5);
+ _animator = GetComponent();
+ if (autoDestroyDelay > 0)
+ _destroyCo = StartCoroutine(DestroyAfter(autoDestroyDelay));
+ }
+
+ private IEnumerator DestroyAfter(float delay)
+ {
+ yield return new WaitForSeconds(delay);
+ Destroy(gameObject);
+ }
+
+ /// 取消当前自动销毁计时(用于 not-self 流程切换状态前)
+ public void CancelAutoDestroy()
+ {
+ if (_destroyCo != null)
+ {
+ StopCoroutine(_destroyCo);
+ _destroyCo = null;
+ }
+ }
+
+ ///
+ /// 重置销毁计时并启动新的延时销毁。
+ ///
+ public void RestartAutoDestroy(float delay)
+ {
+ CancelAutoDestroy();
+ if (delay > 0)
+ _destroyCo = StartCoroutine(DestroyAfter(delay));
}
public void Init(int beishu, int score, bool isMine = false)
@@ -32,6 +78,105 @@ public class BJEndUI : MonoBehaviour
tMP_score.text = score.ToString();
}
+ ///
+ /// not-self 爆奖进入"爆奖中"状态:
+ /// 关闭 tMP_beishu,激活 img_BaoJiangZhong,取消自动销毁(一直保持,直到收到 baoJiangEnd)。
+ /// 由 BaoJiangNotSelfHandler.ShowInProgress 调用。
+ /// 注意:此状态下 BJEndUI 不会自动消失,必须等 Finalize 才会显示倍率并启动销毁计时。
+ ///
+ public void ShowInProgress(bool isMine)
+ {
+ // 取消自动销毁:在途状态一直保持,直到收到 baoJiangEnd 帧同步走 Finalize
+ CancelAutoDestroy();
+
+ if (tMP_beishu != null) tMP_beishu.gameObject.SetActive(false);
+ if (tMP_score != null) tMP_score.gameObject.SetActive(false);
+ if (img_BaoJiangZhong != null) img_BaoJiangZhong.gameObject.SetActive(true);
+
+ // 预先应用金/银 spriteAsset,Finalize 时不用再切换
+ if (tMP_beishu != null) tMP_beishu.spriteAsset = isMine ? goldSprite : SilverSprite;
+ if (tMP_score != null) tMP_score.spriteAsset = isMine ? goldSprite : SilverSprite;
+
+ // ⭐ 触发 Animator 状态机:Appear(出现)→ Loop(持续,直到 Finalize)
+ // Animator 从 Appear 状态自然过渡到 Loop,由状态机配置控制时机
+ if (_animator != null)
+ {
+ if (!string.IsNullOrEmpty(animTrigger_Loop))
+ _animator.SetTrigger(animTrigger_Loop);
+ }
+ }
+
+ ///
+ /// not-self 收到帧同步 baoJiangEnd 后调用:
+ /// 1. 激活 tMP_beishu,关闭 img_BaoJiangZhong(必须)
+ /// 2. 触发 Close 动画状态机,播放分数递增1秒
+ /// 3. 等 Close 动画播完后销毁(缩小由 Animator 控制,不由代码 DOScale)
+ ///
+ public void Finalize(int beishu, int score, bool isMine)
+ {
+ CancelAutoDestroy();
+
+ // 步骤1:切换显示(必须)
+ if (tMP_beishu != null) tMP_beishu.gameObject.SetActive(true);
+ if (tMP_score != null) tMP_score.gameObject.SetActive(true);
+ if (img_BaoJiangZhong != null) img_BaoJiangZhong.gameObject.SetActive(false);
+
+ // 写入倍数 + 金银精灵
+ if (tMP_beishu != null)
+ {
+ tMP_beishu.spriteAsset = isMine ? goldSprite : SilverSprite;
+ tMP_beishu.text = "" + beishu.ToString();
+ }
+ if (tMP_score != null)
+ {
+ tMP_score.spriteAsset = isMine ? goldSprite : SilverSprite;
+ }
+
+ // 步骤2+3:ScoreAnim 1秒递增 → 触发 Close 动画 → 等动画播完销毁
+ _destroyCo = StartCoroutine(FinalizeSequence(score));
+ }
+
+ ///
+ /// not-self 收尾序列:
+ /// 1. ScoreAnim 1秒递增(或等待1秒)
+ /// 2. 触发 Close 动画状态机(缩小由 Animator 控制)
+ /// 3. 等待动画播完后销毁(Animator 关闭动画结束时机由 Exit Time 或 AnimationEvent 决定,
+ /// 此处用动画长度作为兜底等待)
+ ///
+ private IEnumerator FinalizeSequence(int score)
+ {
+ // 等1秒(无论 useScoreAnim 是否开启,都要等1秒再触发 Close)
+ if (useScoreAnim && tMP_score != null)
+ {
+ yield return StartCoroutine(ScoreAnim(score));
+ }
+ else
+ {
+ if (tMP_score != null) tMP_score.text = score.ToString();
+ yield return new WaitForSeconds(1f);
+ }
+
+ // 触发 Close 动画状态机(缩小/淡出由 Animator 控制)
+ if (_animator != null && !string.IsNullOrEmpty(animTrigger_Close))
+ {
+ _animator.SetTrigger(animTrigger_Close);
+
+ // 等 Close 动画播完:优先用 AnimatorStateInfo.length,回退固定 0.5 秒
+ // 注意:Trigger 触发后需要等一帧让 Animator 切换状态,再读取 length
+ yield return null;
+ var stateInfo = _animator.GetCurrentAnimatorStateInfo(0);
+ float waitTime = stateInfo.length > 0 ? stateInfo.length : 0.5f;
+ yield return new WaitForSeconds(waitTime);
+ }
+ else
+ {
+ // 无 Animator:回退到 DOScale 缩小
+ yield return transform.DOScale(Vector3.zero, 0.3f).SetEase(Ease.InBack).WaitForCompletion();
+ }
+
+ Destroy(gameObject);
+ }
+
private IEnumerator ScoreAnim(int target)
{
float duration = 1f;
diff --git a/Assets/MyGame/aa/Game/FLZY/BOSS/BaoJiangNotSelfHandler.cs b/Assets/MyGame/aa/Game/FLZY/BOSS/BaoJiangNotSelfHandler.cs
new file mode 100644
index 000000000..c10ae2eed
--- /dev/null
+++ b/Assets/MyGame/aa/Game/FLZY/BOSS/BaoJiangNotSelfHandler.cs
@@ -0,0 +1,253 @@
+using Assets.MyGame.Scripts.Net.WebResponses;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using Random = UnityEngine.Random;
+
+///
+/// 其他玩家爆奖(not-self)流程管理器。
+///
+/// 流程:
+/// 1. 服务端下发 RoomKillNotice(鱼死亡),客户端在 Ws_DieFish 判断 killFish.userId != 本地 user
+/// 且 effect_DieAward 上挂的是 DieEffect_TSY(Boss爆奖模式)→ 调用 :
+/// a. 不克隆 effect_DieAward,只读取预制体上的 BJEndUI();
+/// b. 把 BJEndUI 实例化到 killer 座位的 ;
+/// c. 关闭 tMP_beishu / 激活 img_BaoJiangZhong;
+/// d. 标记 = true。
+/// 2. 等待服务端帧同步 (爆奖玩家爆完奖励):
+/// 在 中取出对应 pending,调用 显示最终 BJEndUI,
+/// 执行 onScoreAdd 加分,清除 IsBaoJiangingActive。
+///
+/// 机器人杀 Boss 特殊处理:
+/// 机器人不会主动发 baoJiangEnd(机器人客户端无人触发)。
+/// 由房主客户端在进入 not-self 在途状态后,延迟 5~10 秒代发 baoJiangEnd 帧同步给服务端,
+/// 服务端广播给所有玩家 → 各客户端走 OnBaoJiangEnd 完成最终加分。
+///
+/// 帧同步数据由 携带(userId/fishId/beishu/score)。
+/// pending 用 "userId|fishId" 做 key,同一玩家同帧杀多条特殊鱼也能区分。
+///
+public static class BaoJiangNotSelfHandler
+{
+ private class PendingEntry
+ {
+ public BJEndUI endUI;
+ public SitPosData killerSit;
+ public Action onScoreAdd;
+ public int gold;
+ public int beishu;
+ public string userId;
+ public string fishId;
+ public bool isBot;
+ }
+
+ // key: userId|fishId
+ private static readonly Dictionary _pending = new Dictionary();
+
+ /// 机器人爆奖模拟延迟下限(秒)
+ public const float BotSendDelayMin = 5f;
+ /// 机器人爆奖模拟延迟上限(秒)
+ public const float BotSendDelayMax = 10f;
+
+ ///
+ /// 其他玩家爆奖进入"爆奖中"状态。
+ /// 不克隆 effect_DieAward 预制体,只读取其上的 BJEndUI 引用并实例化到座位。
+ ///
+ /// 击杀者座位(用于显示位置 + IsBaoJiangingActive 标记)
+ /// 鱼身上配置的 effect_DieAward 预制体(不克隆,仅读取 BJEndUI)
+ /// 被击杀的鱼 ID(用于帧同步匹配)
+ /// 击杀者 userId
+ /// 倍数(用于 Finalize 显示)
+ /// 金币数(用于 Finalize 时加分)
+ /// 加分回调(来自 Ws_DieFish 的 onScoreAdd)
+ public static bool ShowInProgress(
+ SitPosData killerSit,
+ GameObject effect_DieAwardPrefab,
+ string fishId,
+ string killerUserId,
+ int beishu,
+ int gold,
+ Action onScoreAdd)
+ {
+ if (killerSit == null)
+ {
+ Debug.LogWarning("[BaoJiangNotSelfHandler] killerSit 为空,跳过 not-self 爆奖");
+ return false;
+ }
+
+ // effect_DieAward 不克隆,只读取预制体上的 BJEventBase.bjEndUI
+ BJEndUI bjEndUIPrefab = ResolveBJEndUIPrefab(effect_DieAwardPrefab);
+ if (bjEndUIPrefab == null)
+ {
+ Debug.LogWarning("[BaoJiangNotSelfHandler] effect_DieAward 预制体上未找到 BJEndUI,跳过 not-self 爆奖");
+ return false;
+ }
+
+ // 实例化 BJEndUI 到座位 obj_BaoJiangZhongPanelPosition
+ Transform parent = killerSit.obj_BaoJiangZhongPanelPosition != null
+ ? killerSit.obj_BaoJiangZhongPanelPosition
+ : killerSit.transform;
+
+ var endUI = UnityEngine.Object.Instantiate(bjEndUIPrefab, parent);
+ endUI.transform.localPosition = Vector3.zero;
+ endUI.transform.localRotation = Quaternion.identity;
+ endUI.transform.localScale = Vector3.one;
+
+ // 进入"爆奖中"状态:关 tMP_beishu / 开 img_BaoJiangZhong
+ endUI.ShowInProgress(isMine: false);
+
+ // 标记座位正在爆奖
+ killerSit.IsBaoJiangingActive = true;
+
+ // 机器人识别:优先用 SitPosData.isBot(服务端 RoomPlayerInfo 下发),回退 userId.StartsWith("bot_")
+ bool isBot = killerSit.isBot
+ || (!string.IsNullOrEmpty(killerUserId) && killerUserId.StartsWith("bot_"));
+
+ string key = MakeKey(killerUserId, fishId);
+ _pending[key] = new PendingEntry
+ {
+ endUI = endUI,
+ killerSit = killerSit,
+ onScoreAdd = onScoreAdd,
+ gold = gold,
+ beishu = beishu,
+ userId = killerUserId,
+ fishId = fishId,
+ isBot = isBot,
+ };
+
+ Debug.Log($"[BaoJiangNotSelfHandler] not-self 爆奖进入在途状态:key={key} gold={gold} beishu={beishu} isBot={isBot}");
+
+ // 机器人杀 Boss 特殊处理:机器人不会主动发 baoJiangEnd,由房主客户端延迟 5~10 秒代发帧同步
+ // 服务端广播给所有玩家 → 各客户端走 OnBaoJiangEnd 完成最终加分(保证多人游戏一致性)
+ if (isBot && IsLocalRoomOwner())
+ {
+ GameManager.Instance.StartCoroutine(DelayedSendBaoJiangEndForBot(killerUserId, fishId, beishu, gold));
+ }
+
+ return true;
+ }
+
+ ///
+ /// 收到帧同步 baoJiangEnd 时调用:
+ /// 显示最终 BJEndUI(开 tMP_beishu / 关 img_BaoJiangZhong)→ 加分 → 清除 IsBaoJiangingActive。
+ ///
+ public static void OnBaoJiangEnd(string userId, string fishId, int beishu, int score)
+ {
+ string key = MakeKey(userId, fishId);
+ if (!_pending.TryGetValue(key, out var entry))
+ {
+ Debug.LogWarning($"[BaoJiangNotSelfHandler] 未找到 pending not-self 爆奖:key={key}(可能已被安全超时清理或重复触发)");
+ return;
+ }
+
+ _pending.Remove(key);
+
+ if (entry.endUI != null)
+ {
+ entry.endUI.Finalize(beishu, score, isMine: false);
+ }
+
+ // 加分(与 self 流程一致,在最终效果展示后回加金币)
+ try
+ {
+ entry.onScoreAdd?.Invoke(0);
+ }
+ catch (Exception e)
+ {
+ Debug.LogError($"[BaoJiangNotSelfHandler] onScoreAdd 异常:{e}");
+ }
+
+ if (entry.killerSit != null)
+ {
+ entry.killerSit.IsBaoJiangingActive = false;
+ }
+
+ Debug.Log($"[BaoJiangNotSelfHandler] not-self 爆奖完成:key={key} beishu={beishu} score={score}");
+ }
+
+ ///
+ /// 机器人杀 Boss 时由房主客户端延迟 5~10 秒后代发 baoJiangEnd 帧同步给服务端,
+ /// 服务端广播给所有玩家(含房主自己)→ 各客户端走 OnBaoJiangEnd 完成最终加分。
+ /// 这样可保证所有客户端同一时刻切换到最终 BJEndUI 效果(多人游戏一致性)。
+ ///
+ private static IEnumerator DelayedSendBaoJiangEndForBot(string userId, string fishId, int beishu, int score)
+ {
+ float delay = Random.Range(BotSendDelayMin, BotSendDelayMax);
+ Debug.Log($"[BaoJiangNotSelfHandler] 房主代发机器人爆奖结束帧同步:延迟 {delay:F2}s key={MakeKey(userId, fishId)}");
+ yield return new WaitForSeconds(delay);
+
+ // 防御:发送时 pending 可能已被 ClearAll 清掉(如玩家中途退房),跳过发送
+ string key = MakeKey(userId, fishId);
+ if (!_pending.ContainsKey(key))
+ {
+ Debug.LogWarning($"[BaoJiangNotSelfHandler] 延迟到点但 pending 已不存在,放弃代发:key={key}");
+ yield break;
+ }
+
+ SyncGameData sgd = new SyncGameData
+ {
+ sitPos = 0,
+ frameType = FrameDataType.baoJiangEnd,
+ time = BeijingTimeManager.Instance.CurrentTimestampMs,
+ frameData = new FrameData_BaoJiangEnd
+ {
+ userId = userId,
+ posID = 0,
+ fishId = fishId,
+ beishu = beishu,
+ score = score,
+ }
+ };
+ WebSocketSendList.SyncGameData(sgd);
+
+ Debug.Log($"[BaoJiangNotSelfHandler] 房主已代发 baoJiangEnd 帧同步:key={key} beishu={beishu} score={score}");
+ }
+
+ /// 判断当前本地客户端是否为房主(用于决定是否代发机器人帧同步)
+ private static bool IsLocalRoomOwner()
+ {
+ return SitPosData.roomOwnerSit != null
+ && GameManager.Instance != null
+ && GameManager.Instance.user != null
+ && SitPosData.roomOwnerSit.user == GameManager.Instance.user.id;
+ }
+
+ ///
+ /// 从 effect_DieAward 预制体上读取 BJEndUI(不克隆 effect_DieAward)。
+ /// 优先走 BJEventBase.bjEndUI 字段,回退 GetComponentInChildren<BJEndUI>。
+ ///
+ private static BJEndUI ResolveBJEndUIPrefab(GameObject effect_DieAwardPrefab)
+ {
+ if (effect_DieAwardPrefab == null) return null;
+
+ // 优先:BJEventBase(DieEffect_TSY 继承自它)的 bjEndUI 字段
+ var bjEventBase = effect_DieAwardPrefab.GetComponent();
+ if (bjEventBase != null && bjEventBase.bjEndUI != null)
+ return bjEventBase.bjEndUI;
+
+ // 回退:effect_DieAward 自身或子节点上的 BJEndUI 组件
+ var onSelf = effect_DieAwardPrefab.GetComponent();
+ if (onSelf != null) return onSelf;
+
+ return effect_DieAwardPrefab.GetComponentInChildren(true);
+ }
+
+ /// 清空所有 pending(场景切换/退出房间时调用,避免悬空引用)
+ public static void ClearAll()
+ {
+ foreach (var kv in _pending)
+ {
+ if (kv.Value?.killerSit != null)
+ kv.Value.killerSit.IsBaoJiangingActive = false;
+ if (kv.Value?.endUI != null)
+ {
+ try { UnityEngine.Object.Destroy(kv.Value.endUI.gameObject); }
+ catch { /* 忽略 */ }
+ }
+ }
+ _pending.Clear();
+ }
+
+ private static string MakeKey(string userId, string fishId) => $"{userId}|{fishId}";
+}
diff --git a/Assets/MyGame/aa/Game/FLZY/BOSS/BaoJiangNotSelfHandler.cs.meta b/Assets/MyGame/aa/Game/FLZY/BOSS/BaoJiangNotSelfHandler.cs.meta
new file mode 100644
index 000000000..ce7b8d7c8
--- /dev/null
+++ b/Assets/MyGame/aa/Game/FLZY/BOSS/BaoJiangNotSelfHandler.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 4124e0a2fce52fb4099a40bfb1aff861
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/MyGame/aa/Game/FLZY/BOSS/DLY/FLZY_DLY_BOSS.cs b/Assets/MyGame/aa/Game/FLZY/BOSS/DLY/FLZY_DLY_BOSS.cs
index 3daf058f9..6bc180f81 100644
--- a/Assets/MyGame/aa/Game/FLZY/BOSS/DLY/FLZY_DLY_BOSS.cs
+++ b/Assets/MyGame/aa/Game/FLZY/BOSS/DLY/FLZY_DLY_BOSS.cs
@@ -47,6 +47,7 @@ public class FLZY_DLY_BOSS : MonsterControl_BossBase
{
//GetComponent().enabled = false;
- currEffect_DieAward.SetActive(true);
+ if (currEffect_DieAward != null)
+ currEffect_DieAward.SetActive(true);
}
}
diff --git a/Assets/MyGame/aa/Game/FLZY/BOSS/LLBT/FLZY_LLBT_BOSS.cs b/Assets/MyGame/aa/Game/FLZY/BOSS/LLBT/FLZY_LLBT_BOSS.cs
index c5978315c..bafa15f10 100644
--- a/Assets/MyGame/aa/Game/FLZY/BOSS/LLBT/FLZY_LLBT_BOSS.cs
+++ b/Assets/MyGame/aa/Game/FLZY/BOSS/LLBT/FLZY_LLBT_BOSS.cs
@@ -47,6 +47,7 @@ public class FLZY_LLBT_BOSS : MonsterControl_BossBase
{
//GetComponent().enabled = false;
- currEffect_DieAward.SetActive(true);
+ if (currEffect_DieAward != null)
+ currEffect_DieAward.SetActive(true);
}
}
diff --git a/Assets/MyGame/aa/Game/FLZY/BOSS/PTS/FLZY_PTS_BOSS.cs b/Assets/MyGame/aa/Game/FLZY/BOSS/PTS/FLZY_PTS_BOSS.cs
index 06e2f5c6b..049ce8a2d 100644
--- a/Assets/MyGame/aa/Game/FLZY/BOSS/PTS/FLZY_PTS_BOSS.cs
+++ b/Assets/MyGame/aa/Game/FLZY/BOSS/PTS/FLZY_PTS_BOSS.cs
@@ -47,6 +47,7 @@ public class FLZY_PTS_BOSS : MonsterControl_BossBase
{
//GetComponent().enabled = false;
- currEffect_DieAward.SetActive(true);
+ if (currEffect_DieAward != null)
+ currEffect_DieAward.SetActive(true);
}
}
diff --git a/Assets/MyGame/aa/Game/FLZY/BOSS/QL/Game173_Effect_LDJT.prefab b/Assets/MyGame/aa/Game/FLZY/BOSS/QL/Game173_Effect_LDJT.prefab
index 07499b10d..971cc0e75 100644
--- a/Assets/MyGame/aa/Game/FLZY/BOSS/QL/Game173_Effect_LDJT.prefab
+++ b/Assets/MyGame/aa/Game/FLZY/BOSS/QL/Game173_Effect_LDJT.prefab
@@ -132365,7 +132365,8 @@ MonoBehaviour:
bjEndUI: {fileID: 1790254316978060978, guid: 24c31eadc42c2a84782806970ca46b14, type: 3}
useScorePanel: 1
tMP_Score: {fileID: 6528776512666913368}
- scorePanelPrefab: {fileID: 0}
+ scorePanelPrefab: {fileID: 2322849427427554443, guid: 76fbf7ef2bf607648b6fa328e86774da,
+ type: 3}
currScore: 0
maxScore: 0
scoreCount: 0
@@ -132394,6 +132395,9 @@ MonoBehaviour:
tMP_longzhu3: {fileID: 2498335782564118400}
longzhu1: 0
longzhu2: 0
+ tmp_CoinNum: {fileID: 0}
+ tmp_goldSprite: {fileID: 0}
+ tmp_SilverSprite: {fileID: 0}
--- !u!1 &1709867586078768
GameObject:
m_ObjectHideFlags: 0
diff --git a/Assets/MyGame/aa/Game/FLZY/BOSS/QL/UI_baojiang Variant 7.prefab b/Assets/MyGame/aa/Game/FLZY/BOSS/QL/UI_baojiang Variant 7.prefab
index 90b359906..5a54601e5 100644
--- a/Assets/MyGame/aa/Game/FLZY/BOSS/QL/UI_baojiang Variant 7.prefab
+++ b/Assets/MyGame/aa/Game/FLZY/BOSS/QL/UI_baojiang Variant 7.prefab
@@ -11,7 +11,7 @@ PrefabInstance:
- target: {fileID: 236781439713602893, guid: a96966a1d55149a4f83724f224013303,
type: 3}
propertyPath: m_Name
- value: UI_baojiang Variant
+ value: UI_baojiang Variant 7
objectReference: {fileID: 0}
- target: {fileID: 685976588209175045, guid: a96966a1d55149a4f83724f224013303,
type: 3}
@@ -113,6 +113,42 @@ PrefabInstance:
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
+ - target: {fileID: 2278261232015200288, guid: a96966a1d55149a4f83724f224013303,
+ type: 3}
+ propertyPath: m_Sprite
+ value:
+ objectReference: {fileID: -2085821068, guid: 68e4fec764425b4438eb6a06c7b99c16,
+ type: 3}
+ - target: {fileID: 4213903445032130685, guid: a96966a1d55149a4f83724f224013303,
+ type: 3}
+ propertyPath: m_SizeDelta.x
+ value: 385
+ objectReference: {fileID: 0}
+ - target: {fileID: 4213903445032130685, guid: a96966a1d55149a4f83724f224013303,
+ type: 3}
+ propertyPath: m_SizeDelta.y
+ value: 326
+ objectReference: {fileID: 0}
+ - target: {fileID: 4213903445032130685, guid: a96966a1d55149a4f83724f224013303,
+ type: 3}
+ propertyPath: m_LocalScale.x
+ value: 2.1550467
+ objectReference: {fileID: 0}
+ - target: {fileID: 4213903445032130685, guid: a96966a1d55149a4f83724f224013303,
+ type: 3}
+ propertyPath: m_LocalScale.y
+ value: 2.1550467
+ objectReference: {fileID: 0}
+ - target: {fileID: 4213903445032130685, guid: a96966a1d55149a4f83724f224013303,
+ type: 3}
+ propertyPath: m_LocalScale.z
+ value: 2.1550467
+ objectReference: {fileID: 0}
+ - target: {fileID: 4213903445032130685, guid: a96966a1d55149a4f83724f224013303,
+ type: 3}
+ propertyPath: m_AnchoredPosition.y
+ value: 141
+ objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
diff --git a/Assets/MyGame/aa/Game/FLZY/BOSS/SLZP/FLZY_SLZP_BOSS.cs b/Assets/MyGame/aa/Game/FLZY/BOSS/SLZP/FLZY_SLZP_BOSS.cs
index bb64baffb..30ade0771 100644
--- a/Assets/MyGame/aa/Game/FLZY/BOSS/SLZP/FLZY_SLZP_BOSS.cs
+++ b/Assets/MyGame/aa/Game/FLZY/BOSS/SLZP/FLZY_SLZP_BOSS.cs
@@ -47,6 +47,7 @@ public class FLZY_SLZP_BOSS : MonsterControl_BossBase
{
//GetComponent().enabled = false;
- currEffect_DieAward.SetActive(true);
+ if (currEffect_DieAward != null)
+ currEffect_DieAward.SetActive(true);
}
}
diff --git a/Assets/MyGame/aa/Game/FLZY/BOSS/TSK/FLZY_TSK_BOSS.cs b/Assets/MyGame/aa/Game/FLZY/BOSS/TSK/FLZY_TSK_BOSS.cs
index c5acb5605..d3efe005e 100644
--- a/Assets/MyGame/aa/Game/FLZY/BOSS/TSK/FLZY_TSK_BOSS.cs
+++ b/Assets/MyGame/aa/Game/FLZY/BOSS/TSK/FLZY_TSK_BOSS.cs
@@ -52,6 +52,7 @@ public class FLZY_TSK_BOSS : MonsterControl_BossBase
{
//GetComponent().enabled = false;
- currEffect_DieAward.SetActive(true);
+ if (currEffect_DieAward != null)
+ currEffect_DieAward.SetActive(true);
}
}
diff --git a/Assets/MyGame/aa/Game/FLZY/BOSS/YGSM/FLZY_YGSM_BOSS.cs b/Assets/MyGame/aa/Game/FLZY/BOSS/YGSM/FLZY_YGSM_BOSS.cs
index 572d5d32b..ce1620f61 100644
--- a/Assets/MyGame/aa/Game/FLZY/BOSS/YGSM/FLZY_YGSM_BOSS.cs
+++ b/Assets/MyGame/aa/Game/FLZY/BOSS/YGSM/FLZY_YGSM_BOSS.cs
@@ -47,6 +47,7 @@ public class FLZY_YGSM_BOSS : MonsterControl_BossBase
{
//GetComponent().enabled = false;
- currEffect_DieAward.SetActive(true);
+ if (currEffect_DieAward != null)
+ currEffect_DieAward.SetActive(true);
}
}
diff --git a/Assets/MyGame/aa/Game/HHWK/MonsterTSY/ZDX/HHWK_ZDX_DieEvent.cs b/Assets/MyGame/aa/Game/HHWK/MonsterTSY/ZDX/HHWK_ZDX_DieEvent.cs
index 1d08a66f8..9d67cf1c0 100644
--- a/Assets/MyGame/aa/Game/HHWK/MonsterTSY/ZDX/HHWK_ZDX_DieEvent.cs
+++ b/Assets/MyGame/aa/Game/HHWK/MonsterTSY/ZDX/HHWK_ZDX_DieEvent.cs
@@ -22,11 +22,11 @@ public class HHWK_ZDX_DieEvent : DieEffect_TSY
private void Awake()
{
- paoBei = (int)CreateFishManager.Instance.currGameType.currSitData.consumeGoldNum;
+ // paoBei 由 CreateFishManager 杀鱼流程按击杀者座位传入(避免误用本地 currSitData)
if (fishLayer == 0) fishLayer = LayerMask.GetMask("Fish");
}
- public void SetCoinCount()
+ public override void SetCoinCount()
{
StartCoroutine(BombRoutine());
}
@@ -113,7 +113,8 @@ public class HHWK_ZDX_DieEvent : DieEffect_TSY
if (control == null) continue;
if (control.fishenum != FishTypeEnum.普通鱼) continue;
- var sitPos = CreateFishManager.Instance.currGameType?.currSitData?.transform.position ?? Vector3.zero;
+ // 金币飞向击杀者座位(GetSeatPosition 按 posID 查找,避免误用本地 currSitData)
+ var sitPos = GetSeatPosition();
CreateFishManager.Instance.Id_DieFish_FX(control.guid,
new RedPacketRecord { Amount = paoBei * control.monsterData.fishTypeConfig.fishScore },
sitPos,
diff --git a/Assets/MyGame/aa/Game/UI_baojiang.prefab b/Assets/MyGame/aa/Game/UI_baojiang.prefab
index 6d82315c2..d6d90a291 100644
--- a/Assets/MyGame/aa/Game/UI_baojiang.prefab
+++ b/Assets/MyGame/aa/Game/UI_baojiang.prefab
@@ -1,5 +1,80 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &5598207015042782747
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 4661670236367478549}
+ - component: {fileID: 7626499617345871505}
+ - component: {fileID: 5482184688706782502}
+ m_Layer: 5
+ m_Name: Text_beilv (1)
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 0
+--- !u!224 &4661670236367478549
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5598207015042782747}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 2.5648463, y: 2.5648463, z: 2.5648463}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 5627438144398829183}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0.5, y: 0.5}
+ m_AnchorMax: {x: 0.5, y: 0.5}
+ m_AnchoredPosition: {x: 23.282, y: -219}
+ m_SizeDelta: {x: 192, y: 55}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &7626499617345871505
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5598207015042782747}
+ m_CullTransparentMesh: 1
+--- !u!114 &5482184688706782502
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5598207015042782747}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 21300000, guid: 33d407ecd9f681c41a44162e3ad963e1, type: 3}
+ m_Type: 0
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
--- !u!1001 &2200719792388851550
PrefabInstance:
m_ObjectHideFlags: 0
@@ -236,6 +311,11 @@ PrefabInstance:
propertyPath: m_AnchoredPosition.y
value: 60
objectReference: {fileID: 0}
+ - target: {fileID: 5997907733971708680, guid: 016cca90246ec334390dabcc5bdb6207,
+ type: 3}
+ propertyPath: m_Enabled
+ value: 1
+ objectReference: {fileID: 0}
- target: {fileID: 6769213647795418602, guid: 016cca90246ec334390dabcc5bdb6207,
type: 3}
propertyPath: m_AnchoredPosition.x
@@ -296,7 +376,11 @@ PrefabInstance:
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
- m_AddedGameObjects: []
+ m_AddedGameObjects:
+ - targetCorrespondingSourceObject: {fileID: 5805751044334051617, guid: 016cca90246ec334390dabcc5bdb6207,
+ type: 3}
+ insertIndex: -1
+ addedObject: {fileID: 4661670236367478549}
m_AddedComponents:
- targetCorrespondingSourceObject: {fileID: 2144753057044015635, guid: 016cca90246ec334390dabcc5bdb6207,
type: 3}
@@ -325,7 +409,12 @@ MonoBehaviour:
tMP_score: {fileID: 8500458599698691596}
goldSprite: {fileID: 11400000, guid: b5a3b539bfcb41e46ad594b9b14d7732, type: 2}
SilverSprite: {fileID: 11400000, guid: e034cf5e78470b44f8a1c4d42d5039d6, type: 2}
+ img_BaoJiangZhong: {fileID: 5482184688706782502}
useScoreAnim: 0
+ autoDestroyDelay: 5
+ animTrigger_Appear: Appear
+ animTrigger_Loop: Loop
+ animTrigger_Close: Close
--- !u!114 &4340237964197962142 stripped
MonoBehaviour:
m_CorrespondingSourceObject: {fileID: 2499807387639965376, guid: 016cca90246ec334390dabcc5bdb6207,
@@ -338,6 +427,12 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
m_Name:
m_EditorClassIdentifier:
+--- !u!224 &5627438144398829183 stripped
+RectTransform:
+ m_CorrespondingSourceObject: {fileID: 5805751044334051617, guid: 016cca90246ec334390dabcc5bdb6207,
+ type: 3}
+ m_PrefabInstance: {fileID: 2200719792388851550}
+ m_PrefabAsset: {fileID: 0}
--- !u!114 &8500458599698691596 stripped
MonoBehaviour:
m_CorrespondingSourceObject: {fileID: 7745405151849361746, guid: 016cca90246ec334390dabcc5bdb6207,
diff --git a/Assets/MyGame/aa/UI/Game/GameMainPanel_FishBase.cs b/Assets/MyGame/aa/UI/Game/GameMainPanel_FishBase.cs
index daa89bfb4..9e86f058e 100644
--- a/Assets/MyGame/aa/UI/Game/GameMainPanel_FishBase.cs
+++ b/Assets/MyGame/aa/UI/Game/GameMainPanel_FishBase.cs
@@ -460,6 +460,8 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
// SyncGameData_FreezeFish 已废弃:冰冻改由服务端 FishFrozen 事件统一触发
EventCenter.Instance.AddEventListener(ConstEventString.FishFrozen, OnFishFrozen);
EventCenter.Instance.AddEventListener(ConstEventString.SyncGameData_BotFireAngle, SyncGameData_BotFireAngle);
+ // ⭐ 爆奖结束帧同步(baoJiangEnd):其他玩家爆奖完成,显示最终 BJEndUI 并加分
+ EventCenter.Instance.AddEventListener(ConstEventString.BaoJiangEnd, OnBaoJiangEnd);
btn_TuJian.onClick.AddListener(() =>
{
subUIManager.ShowAsync(UIPanel.GameTuJian);
@@ -540,10 +542,13 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
// SyncGameData_FreezeFish 已废弃:冰冻改由服务端 FishFrozen 事件统一触发
EventCenter.Instance.RemoveEventListener(ConstEventString.FishFrozen, OnFishFrozen);
EventCenter.Instance.RemoveEventListener(ConstEventString.SyncGameData_BotFireAngle, SyncGameData_BotFireAngle);
+ EventCenter.Instance.RemoveEventListener(ConstEventString.BaoJiangEnd, OnBaoJiangEnd);
// ⭐ 离场清理:子弹池 + 特效池彻底清空,防止内存泄漏
BulletPool.Instance.ClearAll();
EffectPool.Instance.ClearAll();
+ // ⭐ 清理未完成的 not-self 爆奖 pending(避免悬空引用)
+ BaoJiangNotSelfHandler.ClearAll();
}
public virtual void Start()
@@ -2328,6 +2333,27 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
sit.tMP_TurretConsumeNum.text = data.cannonMultiple.ToString();
}
+ ///
+ /// 爆奖结束帧同步(baoJiangEnd):
+ /// 其他玩家爆奖流程完成,从 pending 取出对应 not-self 爆奖,
+ /// 显示最终 BJEndUI(开 tMP_beishu / 关 img_BaoJiangZhong)并加分。
+ /// 自己触发的爆奖不在这里处理(self 流程在 BJEventBase 内部已自行结束)。
+ ///
+ public void OnBaoJiangEnd(SyncGameData sync)
+ {
+ var data = FrameDataParser.Parse(sync.frameData);
+ if (data == null)
+ {
+ Debug.LogWarning("[GameMainPanel_FishBase] OnBaoJiangEnd: frameData 解析失败");
+ return;
+ }
+
+ // 自己触发的爆奖不在这里处理(self 流程已自行走完)
+ if (data.userId == GameManager.Instance.user.id) return;
+
+ BaoJiangNotSelfHandler.OnBaoJiangEnd(data.userId, data.fishId, data.beishu, data.score);
+ }
+
public void SyncCannonMultiple(int consumeGold)
{
if (currSitData == null) return;
diff --git a/Assets/MyGame/aa/UI/Game/右上.prefab b/Assets/MyGame/aa/UI/Game/右上.prefab
index cbb05997c..0e0736e06 100644
--- a/Assets/MyGame/aa/UI/Game/右上.prefab
+++ b/Assets/MyGame/aa/UI/Game/右上.prefab
@@ -353,6 +353,16 @@ PrefabInstance:
propertyPath: m_SortingLayer
value: 0
objectReference: {fileID: 0}
+ - target: {fileID: 8127545208163857053, guid: 509192cd5f627cf409a54e9be694a24d,
+ type: 3}
+ propertyPath: m_AnchoredPosition.x
+ value: -70
+ objectReference: {fileID: 0}
+ - target: {fileID: 8127545208163857053, guid: 509192cd5f627cf409a54e9be694a24d,
+ type: 3}
+ propertyPath: m_AnchoredPosition.y
+ value: 157
+ objectReference: {fileID: 0}
- target: {fileID: 8456731491629334137, guid: 509192cd5f627cf409a54e9be694a24d,
type: 3}
propertyPath: m_Pivot.x
diff --git a/Assets/MyGame/aa/UI/Game/右下.prefab b/Assets/MyGame/aa/UI/Game/右下.prefab
index 18bdda056..d80ba0fd7 100644
--- a/Assets/MyGame/aa/UI/Game/右下.prefab
+++ b/Assets/MyGame/aa/UI/Game/右下.prefab
@@ -38,6 +38,11 @@ PrefabInstance:
propertyPath: m_AnchoredPosition.x
value: -68
objectReference: {fileID: 0}
+ - target: {fileID: 6515038176716052403, guid: c9c177e60fd350e49844955f7e8a5874,
+ type: 3}
+ propertyPath: m_AnchoredPosition.x
+ value: -80
+ objectReference: {fileID: 0}
- target: {fileID: 6916578527196273495, guid: c9c177e60fd350e49844955f7e8a5874,
type: 3}
propertyPath: m_Pivot.x
diff --git a/Assets/MyGame/aa/UI/Game/左下.prefab b/Assets/MyGame/aa/UI/Game/左下.prefab
index 0edb8d1ca..bb0a1dd24 100644
--- a/Assets/MyGame/aa/UI/Game/左下.prefab
+++ b/Assets/MyGame/aa/UI/Game/左下.prefab
@@ -1361,6 +1361,7 @@ RectTransform:
- {fileID: 8688572226311385210}
- {fileID: 5982321734877658021}
- {fileID: 2913924626316377592}
+ - {fileID: 6515038176716052403}
m_Father: {fileID: 6916578527196273495}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
@@ -1553,6 +1554,157 @@ RectTransform:
m_AnchoredPosition: {x: -3.5020447, y: 36.505585}
m_SizeDelta: {x: 170, y: 75}
m_Pivot: {x: 0.5, y: 0.5}
+--- !u!1 &7786583167098886127
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 5524080749604356889}
+ - component: {fileID: 1631232687274162216}
+ - component: {fileID: 73195319764559091}
+ m_Layer: 5
+ m_Name: Image
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &5524080749604356889
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 7786583167098886127}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 6515038176716052403}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0.5, y: 0.5}
+ m_AnchorMax: {x: 0.5, y: 0.5}
+ m_AnchoredPosition: {x: 0, y: -11}
+ m_SizeDelta: {x: 99, y: 30}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &1631232687274162216
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 7786583167098886127}
+ m_CullTransparentMesh: 1
+--- !u!114 &73195319764559091
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 7786583167098886127}
+ m_Enabled: 0
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 21300000, guid: 966302477530b50448107e982ba24b24, type: 3}
+ m_Type: 0
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!1 &8211773067005770755
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 6515038176716052403}
+ - component: {fileID: 6688785355602917098}
+ - component: {fileID: 1292175335872007774}
+ m_Layer: 5
+ m_Name: witPlay (1)
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &6515038176716052403
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 8211773067005770755}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 5524080749604356889}
+ m_Father: {fileID: 3177929166328559778}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0.5, y: 0}
+ m_AnchorMax: {x: 0.5, y: 0}
+ m_AnchoredPosition: {x: 57.1, y: 116}
+ m_SizeDelta: {x: 151, y: 69}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &6688785355602917098
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 8211773067005770755}
+ m_CullTransparentMesh: 1
+--- !u!114 &1292175335872007774
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 8211773067005770755}
+ m_Enabled: 0
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 21300000, guid: 754604517d492bd4a9ac914a9f9e08ce, type: 3}
+ m_Type: 0
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
--- !u!1 &8529218940359093989
GameObject:
m_ObjectHideFlags: 0
@@ -1821,6 +1973,8 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 16cfaab69e1fa404dbb8432276bd7537, type: 3}
m_Name:
m_EditorClassIdentifier:
+ IsBaoJiangingActive: 0
+ obj_BaoJiangZhongPanelPosition: {fileID: 6515038176716052403}
user:
posID: 0
isBot: 0