This commit is contained in:
2026-07-30 22:09:55 +08:00
parent 9ad6650b77
commit fafc5c8bb7
32 changed files with 1269 additions and 171 deletions
@@ -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
@@ -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
@@ -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
Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

@@ -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:
@@ -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) 下发
/// <summary>爆奖结束帧同步(baoJiangEnd):某玩家爆奖流程完成,其他客户端显示最终 BJEndUI 并加分</summary>
public const string BaoJiangEnd = "BaoJiangEnd";
// ================================================================
// 服务端 → 客户端事件 (新协议)
+2 -1
View File
@@ -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
@@ -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(() =>
@@ -1563,6 +1563,28 @@ public class CreateFishManager : MonoSingleton<CreateFishManager>
// 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<CreateFishManager>
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<DieEffect_TSY>();
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<CreateFishManager>
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<CreateFishManager>
// 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; // ⭐ 金/银区分
@@ -27,6 +27,10 @@ public class GameManager : MonoSingleton<GameManager>
[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<string, FishTypeConfig> dic_fishTypeConfigs = new Dictionary<string, FishTypeConfig>();
+2 -2
View File
@@ -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
@@ -53,6 +53,8 @@ namespace Assets.MyGame.Scripts.Net.WebResponses
changeCannonMultiple=9,
changeWing=10,
// requestSyncFish=11 已废弃:鱼同步改由服务端 OnFishSpawn(type=sync) 事件下发
/// <summary>爆奖结束:某玩家爆奖流程完成,广播给其他客户端显示最终 BJEndUI 并加分</summary>
baoJiangEnd=12,
}
[Serializable]
public class FireCannonSendData
@@ -145,6 +147,25 @@ namespace Assets.MyGame.Scripts.Net.WebResponses
public int cannonMultiple;
}
/// <summary>
/// 爆奖结束帧数据(frameType=baoJiangEnd)。
/// 服务端在玩家爆奖流程完成时广播,其他客户端据此显示最终 BJEndUI 并加分。
/// </summary>
[Serializable]
public class FrameData_BaoJiangEnd : FrameData
{
/// <summary>爆奖玩家 ID</summary>
public string userId;
/// <summary>击杀者座位 ID</summary>
public int posID;
/// <summary>死亡的鱼 ID(用于匹配 pending 的 not-self 爆奖)</summary>
public string fishId;
/// <summary>最终倍数</summary>
public int beishu;
/// <summary>最终得分(金币)</summary>
public int score;
}
// ================================================================
// OnFishSpawn 事件数据结构 (服务端出鱼,破坏性替代 createFish 帧同步)
// ================================================================
@@ -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;
@@ -302,6 +302,9 @@ namespace Assets.MyGame.Scripts.Net
EventCenter.Instance.EventTrigger<SyncGameData>(ConstEventString.SyncGameData_ChangeWing, syncGameData);
break;
// requestSyncFish=11 已废弃:鱼同步改由服务端 OnFishSpawn(type=sync) 下发
case FrameDataType.baoJiangEnd:
EventCenter.Instance.EventTrigger<SyncGameData>(ConstEventString.BaoJiangEnd, syncGameData);
break;
default:
break;
}
+1 -1
View File
@@ -17,7 +17,7 @@ public enum TurretControlMode
public class SitPosData : MonoBehaviour
{
public bool IsBaoJiangingActive;
public GameObject obj_BaoJiangZhongPanel;
public Transform obj_BaoJiangZhongPanelPosition;
/// <summary>本地玩家的座位引用(由游戏面板初始化时设置)</summary>
public static SitPosData localPlayerSit;
+146 -1
View File
@@ -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; // 是否启用分数递增动画
/// <summary>默认自动销毁延时(秒);not-self 在途状态会取消此计时,等 Finalize 后才重启</summary>
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;
/// <summary>预制体自带的 Animator(出现/持续/关闭 三态由状态机控制)</summary>
private Animator _animator;
private void Awake()
{
Destroy(gameObject, 5);
_animator = GetComponent<Animator>();
if (autoDestroyDelay > 0)
_destroyCo = StartCoroutine(DestroyAfter(autoDestroyDelay));
}
private IEnumerator DestroyAfter(float delay)
{
yield return new WaitForSeconds(delay);
Destroy(gameObject);
}
/// <summary>取消当前自动销毁计时(用于 not-self 流程切换状态前)</summary>
public void CancelAutoDestroy()
{
if (_destroyCo != null)
{
StopCoroutine(_destroyCo);
_destroyCo = null;
}
}
/// <summary>
/// 重置销毁计时并启动新的延时销毁。
/// </summary>
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();
}
/// <summary>
/// not-self 爆奖进入"爆奖中"状态:
/// 关闭 tMP_beishu,激活 img_BaoJiangZhong,取消自动销毁(一直保持,直到收到 baoJiangEnd)。
/// 由 BaoJiangNotSelfHandler.ShowInProgress 调用。
/// 注意:此状态下 BJEndUI 不会自动消失,必须等 Finalize 才会显示倍率并启动销毁计时。
/// </summary>
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);
}
}
/// <summary>
/// not-self 收到帧同步 baoJiangEnd 后调用:
/// 1. 激活 tMP_beishu,关闭 img_BaoJiangZhong(必须)
/// 2. 触发 Close 动画状态机,播放分数递增1秒
/// 3. 等 Close 动画播完后销毁(缩小由 Animator 控制,不由代码 DOScale)
/// </summary>
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 = "<sprite=6>" + beishu.ToString();
}
if (tMP_score != null)
{
tMP_score.spriteAsset = isMine ? goldSprite : SilverSprite;
}
// 步骤2+3:ScoreAnim 1秒递增 → 触发 Close 动画 → 等动画播完销毁
_destroyCo = StartCoroutine(FinalizeSequence(score));
}
/// <summary>
/// not-self 收尾序列:
/// 1. ScoreAnim 1秒递增(或等待1秒)
/// 2. 触发 Close 动画状态机(缩小由 Animator 控制)
/// 3. 等待动画播完后销毁(Animator 关闭动画结束时机由 Exit Time 或 AnimationEvent 决定,
/// 此处用动画长度作为兜底等待)
/// </summary>
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;
@@ -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;
/// <summary>
/// 其他玩家爆奖(not-self)流程管理器。
///
/// 流程:
/// 1. 服务端下发 RoomKillNotice(鱼死亡),客户端在 Ws_DieFish 判断 killFish.userId != 本地 user
/// 且 effect_DieAward 上挂的是 DieEffect_TSY(Boss爆奖模式)→ 调用 <see cref="ShowInProgress"/>:
/// a. 不克隆 effect_DieAward,只读取预制体上的 BJEndUI(<see cref="BJEventBase.bjEndUI"/>);
/// b. 把 BJEndUI 实例化到 killer 座位的 <see cref="SitPosData.obj_BaoJiangZhongPanelPosition"/>;
/// c. <see cref="BJEndUI.ShowInProgress"/> 关闭 tMP_beishu / 激活 img_BaoJiangZhong;
/// d. 标记 <see cref="SitPosData.IsBaoJiangingActive"/> = true。
/// 2. 等待服务端帧同步 <see cref="FrameDataType.baoJiangEnd"/>(爆奖玩家爆完奖励):
/// 在 <see cref="OnBaoJiangEnd"/> 中取出对应 pending,调用 <see cref="BJEndUI.Finalize"/> 显示最终 BJEndUI,
/// 执行 onScoreAdd 加分,清除 IsBaoJiangingActive。
///
/// 机器人杀 Boss 特殊处理:
/// 机器人不会主动发 baoJiangEnd(机器人客户端无人触发)。
/// 由房主客户端在进入 not-self 在途状态后,延迟 5~10 秒代发 baoJiangEnd 帧同步给服务端,
/// 服务端广播给所有玩家 → 各客户端走 OnBaoJiangEnd 完成最终加分。
///
/// 帧同步数据由 <see cref="FrameData_BaoJiangEnd"/> 携带(userId/fishId/beishu/score)。
/// pending 用 "userId|fishId" 做 key,同一玩家同帧杀多条特殊鱼也能区分。
/// </summary>
public static class BaoJiangNotSelfHandler
{
private class PendingEntry
{
public BJEndUI endUI;
public SitPosData killerSit;
public Action<int> onScoreAdd;
public int gold;
public int beishu;
public string userId;
public string fishId;
public bool isBot;
}
// key: userId|fishId
private static readonly Dictionary<string, PendingEntry> _pending = new Dictionary<string, PendingEntry>();
/// <summary>机器人爆奖模拟延迟下限(秒)</summary>
public const float BotSendDelayMin = 5f;
/// <summary>机器人爆奖模拟延迟上限(秒)</summary>
public const float BotSendDelayMax = 10f;
/// <summary>
/// 其他玩家爆奖进入"爆奖中"状态。
/// 不克隆 effect_DieAward 预制体,只读取其上的 BJEndUI 引用并实例化到座位。
/// </summary>
/// <param name="killerSit">击杀者座位(用于显示位置 + IsBaoJiangingActive 标记)</param>
/// <param name="effect_DieAwardPrefab">鱼身上配置的 effect_DieAward 预制体(不克隆,仅读取 BJEndUI)</param>
/// <param name="fishId">被击杀的鱼 ID(用于帧同步匹配)</param>
/// <param name="killerUserId">击杀者 userId</param>
/// <param name="beishu">倍数(用于 Finalize 显示)</param>
/// <param name="gold">金币数(用于 Finalize 时加分)</param>
/// <param name="onScoreAdd">加分回调(来自 Ws_DieFish 的 onScoreAdd)</param>
public static bool ShowInProgress(
SitPosData killerSit,
GameObject effect_DieAwardPrefab,
string fishId,
string killerUserId,
int beishu,
int gold,
Action<int> 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;
}
/// <summary>
/// 收到帧同步 baoJiangEnd 时调用:
/// 显示最终 BJEndUI(开 tMP_beishu / 关 img_BaoJiangZhong)→ 加分 → 清除 IsBaoJiangingActive。
/// </summary>
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}");
}
/// <summary>
/// 机器人杀 Boss 时由房主客户端延迟 5~10 秒后代发 baoJiangEnd 帧同步给服务端,
/// 服务端广播给所有玩家(含房主自己)→ 各客户端走 OnBaoJiangEnd 完成最终加分。
/// 这样可保证所有客户端同一时刻切换到最终 BJEndUI 效果(多人游戏一致性)。
/// </summary>
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}");
}
/// <summary>判断当前本地客户端是否为房主(用于决定是否代发机器人帧同步)</summary>
private static bool IsLocalRoomOwner()
{
return SitPosData.roomOwnerSit != null
&& GameManager.Instance != null
&& GameManager.Instance.user != null
&& SitPosData.roomOwnerSit.user == GameManager.Instance.user.id;
}
/// <summary>
/// 从 effect_DieAward 预制体上读取 BJEndUI(不克隆 effect_DieAward)。
/// 优先走 BJEventBase.bjEndUI 字段,回退 GetComponentInChildren&lt;BJEndUI&gt;。
/// </summary>
private static BJEndUI ResolveBJEndUIPrefab(GameObject effect_DieAwardPrefab)
{
if (effect_DieAwardPrefab == null) return null;
// 优先:BJEventBase(DieEffect_TSY 继承自它)的 bjEndUI 字段
var bjEventBase = effect_DieAwardPrefab.GetComponent<BJEventBase>();
if (bjEventBase != null && bjEventBase.bjEndUI != null)
return bjEventBase.bjEndUI;
// 回退:effect_DieAward 自身或子节点上的 BJEndUI 组件
var onSelf = effect_DieAwardPrefab.GetComponent<BJEndUI>();
if (onSelf != null) return onSelf;
return effect_DieAwardPrefab.GetComponentInChildren<BJEndUI>(true);
}
/// <summary>清空所有 pending(场景切换/退出房间时调用,避免悬空引用)</summary>
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}";
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 4124e0a2fce52fb4099a40bfb1aff861
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -47,6 +47,7 @@ public class FLZY_DLY_BOSS : MonsterControl_BossBase
{
//GetComponent<Animator>().enabled = false;
currEffect_DieAward.SetActive(true);
if (currEffect_DieAward != null)
currEffect_DieAward.SetActive(true);
}
}
@@ -47,6 +47,7 @@ public class FLZY_LLBT_BOSS : MonsterControl_BossBase
{
//GetComponent<Animator>().enabled = false;
currEffect_DieAward.SetActive(true);
if (currEffect_DieAward != null)
currEffect_DieAward.SetActive(true);
}
}
@@ -47,6 +47,7 @@ public class FLZY_PTS_BOSS : MonsterControl_BossBase
{
//GetComponent<Animator>().enabled = false;
currEffect_DieAward.SetActive(true);
if (currEffect_DieAward != null)
currEffect_DieAward.SetActive(true);
}
}
@@ -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
@@ -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: []
@@ -47,6 +47,7 @@ public class FLZY_SLZP_BOSS : MonsterControl_BossBase
{
//GetComponent<Animator>().enabled = false;
currEffect_DieAward.SetActive(true);
if (currEffect_DieAward != null)
currEffect_DieAward.SetActive(true);
}
}
@@ -52,6 +52,7 @@ public class FLZY_TSK_BOSS : MonsterControl_BossBase
{
//GetComponent<Animator>().enabled = false;
currEffect_DieAward.SetActive(true);
if (currEffect_DieAward != null)
currEffect_DieAward.SetActive(true);
}
}
@@ -47,6 +47,7 @@ public class FLZY_YGSM_BOSS : MonsterControl_BossBase
{
//GetComponent<Animator>().enabled = false;
currEffect_DieAward.SetActive(true);
if (currEffect_DieAward != null)
currEffect_DieAward.SetActive(true);
}
}
@@ -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,
+96 -1
View File
@@ -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,
@@ -460,6 +460,8 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
// SyncGameData_FreezeFish 已废弃:冰冻改由服务端 FishFrozen 事件统一触发
EventCenter.Instance.AddEventListener(ConstEventString.FishFrozen, OnFishFrozen);
EventCenter.Instance.AddEventListener<SyncGameData>(ConstEventString.SyncGameData_BotFireAngle, SyncGameData_BotFireAngle);
// ⭐ 爆奖结束帧同步(baoJiangEnd):其他玩家爆奖完成,显示最终 BJEndUI 并加分
EventCenter.Instance.AddEventListener<SyncGameData>(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<SyncGameData>(ConstEventString.SyncGameData_BotFireAngle, SyncGameData_BotFireAngle);
EventCenter.Instance.RemoveEventListener<SyncGameData>(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();
}
/// <summary>
/// 爆奖结束帧同步(baoJiangEnd):
/// 其他玩家爆奖流程完成,从 pending 取出对应 not-self 爆奖,
/// 显示最终 BJEndUI(开 tMP_beishu / 关 img_BaoJiangZhong)并加分。
/// 自己触发的爆奖不在这里处理(self 流程在 BJEventBase 内部已自行结束)。
/// </summary>
public void OnBaoJiangEnd(SyncGameData sync)
{
var data = FrameDataParser.Parse<FrameData_BaoJiangEnd>(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;
+10
View File
@@ -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
+5
View File
@@ -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
+154
View File
@@ -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