Sfoglia il codice sorgente

实现蝌蚪开始向外冲刺的效果,添加召唤蝌蚪特效,将飞伞逻辑改为速度而非时间,增加boss的闪白

HY-LSZNWIN10\Administrator 10 ore fa
parent
commit
a47d31065a

+ 22 - 6
ActionTowerDefense/Assets/Resources/Prefab/Boss/WaterSprite/Boss_Braid.prefab

@@ -395,7 +395,7 @@ MonoBehaviour:
   - hpRadioThreshold: 0.7
     maxInterval: 3
     minInterval: 2
-  - hpRadioThreshold: 0.4
+  - hpRadioThreshold: 0.3
     maxInterval: 2
     minInterval: 1.8
   idleAniNames:
@@ -437,7 +437,7 @@ MonoBehaviour:
   - category: 1
     attacks:
     - attack: 1
-      weight: 5
+      weight: 3
     - attack: 3
       weight: 0
     - attack: 5
@@ -472,14 +472,17 @@ MonoBehaviour:
   isDisappear: 0
   polliNum: 100
   pws: {fileID: 566765055176838525}
-  changeStateHPPer: 46000000320000001e0000000a000000
+  changeStateHPPer: 46000000320000000a000000
   polliTime: 10
   angryAttackInterval: 1.5
   angryDuration: 10
   isAngry: 0
   isTakingUmbre: 0
   isHoldingUmbre: 1
+  isReadyChangStage: 0
+  isAppearing: 0
   smokeShell: {fileID: 417478504669294145, guid: b00dd469a1c512e4493fb64fa1ca01cc, type: 3}
+  summonStart: {fileID: 417478504669294145, guid: 2c9208fbaec0ddc4b9291450af44ec7d, type: 3}
 --- !u!114 &16214313399265844
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -1068,7 +1071,7 @@ BoxCollider:
   m_IsTrigger: 1
   m_Enabled: 1
   serializedVersion: 2
-  m_Size: {x: 1, y: 3, z: 2}
+  m_Size: {x: 1.61, y: 3, z: 2}
   m_Center: {x: 0.17732054, y: 1.825087, z: 0}
 --- !u!114 &16214313928419397
 MonoBehaviour:
@@ -1428,6 +1431,7 @@ GameObject:
   - component: {fileID: 16214314406868123}
   - component: {fileID: 16214314406868122}
   - component: {fileID: 16214314406868117}
+  - component: {fileID: 1283446174633233419}
   m_Layer: 8
   m_Name: Spine
   m_TagString: Untagged
@@ -1577,9 +1581,21 @@ MonoBehaviour:
   translator:
     autoReset: 1
     useCustomMixMode: 1
-    layerMixModes: 01000000
-    layerBlendModes: 01000000
+    layerMixModes: 0000000001000000
+    layerBlendModes: 0100000002000000
   updateTiming: 1
+--- !u!114 &1283446174633233419
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 16214314406868119}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 688f44fee7c252840876e657c3d46617, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
 --- !u!1 &16214314582601927
 GameObject:
   m_ObjectHideFlags: 0

+ 11 - 5
ActionTowerDefense/Assets/Resources/Prefab/Boss/WaterSprite/Boss_Umbrella.prefab

@@ -10239,13 +10239,13 @@ MonoBehaviour:
   farFromPlayerDis: 15
   minTime: 3
   maxTime: 5
-  initialSpeed: 60
+  initialSpeed: 40
   appearTime: 0.005
   stayTime: 1.7
   attentionyTime: 0.3
   backTime: 0.6
   disappearTime: 0.2
-  effectIns: {fileID: 2716627639776660234}
+  effectIns: {fileID: 2730368862525937503}
   initialTransparency: 0.2
   leftX: -9
   rightX: 9
@@ -10322,8 +10322,14 @@ Transform:
   m_CorrespondingSourceObject: {fileID: 7473170563405908937, guid: 8d195dec6a5551844ba6e4a0a4af3b59, type: 3}
   m_PrefabInstance: {fileID: 4757331149122060480}
   m_PrefabAsset: {fileID: 0}
---- !u!1 &2716627639776660234 stripped
-GameObject:
-  m_CorrespondingSourceObject: {fileID: 7473170563405908938, guid: 8d195dec6a5551844ba6e4a0a4af3b59, type: 3}
+--- !u!114 &2730368862525937503 stripped
+MonoBehaviour:
+  m_CorrespondingSourceObject: {fileID: 7485360237884938143, guid: 8d195dec6a5551844ba6e4a0a4af3b59, type: 3}
   m_PrefabInstance: {fileID: 4757331149122060480}
   m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 9a4a2dbc1e482cd4b9f1532e1fddcb30, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 

+ 3 - 1
ActionTowerDefense/Assets/Resources/Prefab/Enemy/Enemy_Polliwog.prefab

@@ -1168,8 +1168,10 @@ MonoBehaviour:
   updateInterval: 1
   isInGroup: 1
   attackTrigger: {fileID: 3696373114645964265}
-  isReturn: 0
   decelerationDistanceThreshold: 10
+  isRush: 0
+  rushTime: 0.5
+  rushDir: {x: 0, y: 0}
 --- !u!114 &4087616115681235363
 MonoBehaviour:
   m_ObjectHideFlags: 0

+ 529 - 26
ActionTowerDefense/Assets/Resources/Spine/Boss_braid/Boss_braid_SkeletonData_Controller.controller

@@ -655,6 +655,28 @@ AnimationClip:
   m_HasGenericRootTransform: 0
   m_HasMotionFloatCurves: 0
   m_Events: []
+--- !u!1101 &-7497585641483262226
+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: 3671151615531027066}
+  m_Solo: 0
+  m_Mute: 0
+  m_IsExit: 0
+  serializedVersion: 3
+  m_TransitionDuration: 0.25
+  m_TransitionOffset: 0
+  m_ExitTime: 0.85
+  m_HasExitTime: 1
+  m_HasFixedDuration: 1
+  m_InterruptionSource: 0
+  m_OrderedInterruption: 1
+  m_CanTransitionToSelf: 1
 --- !u!74 &-7080057319647059731
 AnimationClip:
   m_ObjectHideFlags: 0
@@ -1113,7 +1135,63 @@ AnimationClip:
     m_KeepOriginalPositionXZ: 0
     m_HeightFromFeet: 0
     m_Mirror: 0
-  m_EditorCurves: []
+  m_EditorCurves:
+  - curve:
+      serializedVersion: 2
+      m_Curve:
+      - serializedVersion: 3
+        time: 0
+        value: 0
+        inSlope: 0
+        outSlope: 0
+        tangentMode: 0
+        weightedMode: 0
+        inWeight: 0.33333334
+        outWeight: 0.33333334
+      - serializedVersion: 3
+        time: 13.066668
+        value: 0
+        inSlope: 0
+        outSlope: 0
+        tangentMode: 0
+        weightedMode: 0
+        inWeight: 0.33333334
+        outWeight: 0.33333334
+      m_PreInfinity: 2
+      m_PostInfinity: 2
+      m_RotationOrder: 4
+    attribute: m_IsActive
+    path: 
+    classID: 1
+    script: {fileID: 0}
+  - curve:
+      serializedVersion: 2
+      m_Curve:
+      - serializedVersion: 3
+        time: 0
+        value: 0
+        inSlope: 0
+        outSlope: 0
+        tangentMode: 0
+        weightedMode: 0
+        inWeight: 0
+        outWeight: 0
+      - serializedVersion: 3
+        time: 13.066668
+        value: 0
+        inSlope: 0
+        outSlope: 0
+        tangentMode: 0
+        weightedMode: 0
+        inWeight: 0
+        outWeight: 0
+      m_PreInfinity: 2
+      m_PostInfinity: 2
+      m_RotationOrder: 4
+    attribute: dummy
+    path: 
+    classID: 1
+    script: {fileID: 0}
   m_EulerEditorCurves: []
   m_HasGenericRootTransform: 0
   m_HasMotionFloatCurves: 0
@@ -1166,28 +1244,32 @@ AnimatorStateTransition:
   m_InterruptionSource: 0
   m_OrderedInterruption: 1
   m_CanTransitionToSelf: 1
---- !u!1101 &-5648560309932191177
-AnimatorStateTransition:
+--- !u!1102 &-5857599271634347540
+AnimatorState:
+  serializedVersion: 6
   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: 3671151615531027066}
-  m_Solo: 0
-  m_Mute: 0
-  m_IsExit: 0
-  serializedVersion: 3
-  m_TransitionDuration: 0.25
-  m_TransitionOffset: 0
-  m_ExitTime: 0.85
-  m_HasExitTime: 1
-  m_HasFixedDuration: 1
-  m_InterruptionSource: 0
-  m_OrderedInterruption: 1
-  m_CanTransitionToSelf: 1
+  m_Name: WhiteToNormal
+  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: 70bbb7913a77db146bfdd30aecd94c78, type: 2}
+  m_Tag: 
+  m_SpeedParameter: 
+  m_MirrorParameter: 
+  m_CycleOffsetParameter: 
+  m_TimeParameter: 
 --- !u!1101 &-5575470831354133057
 AnimatorStateTransition:
   m_ObjectHideFlags: 1
@@ -1355,6 +1437,32 @@ AnimatorState:
   m_MirrorParameter: 
   m_CycleOffsetParameter: 
   m_TimeParameter: 
+--- !u!1102 &-4558071603223277617
+AnimatorState:
+  serializedVersion: 6
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: BeFrozen
+  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: 400c682861be5624981548c4f81ce267, type: 2}
+  m_Tag: 
+  m_SpeedParameter: 
+  m_MirrorParameter: 
+  m_CycleOffsetParameter: 
+  m_TimeParameter: 
 --- !u!1101 &-4360078561056359963
 AnimatorStateTransition:
   m_ObjectHideFlags: 1
@@ -2306,7 +2414,63 @@ AnimationClip:
     m_KeepOriginalPositionXZ: 0
     m_HeightFromFeet: 0
     m_Mirror: 0
-  m_EditorCurves: []
+  m_EditorCurves:
+  - curve:
+      serializedVersion: 2
+      m_Curve:
+      - serializedVersion: 3
+        time: 0
+        value: 0
+        inSlope: 0
+        outSlope: 0
+        tangentMode: 0
+        weightedMode: 0
+        inWeight: 0.33333334
+        outWeight: 0.33333334
+      - serializedVersion: 3
+        time: 1.6666667
+        value: 0
+        inSlope: 0
+        outSlope: 0
+        tangentMode: 0
+        weightedMode: 0
+        inWeight: 0.33333334
+        outWeight: 0.33333334
+      m_PreInfinity: 2
+      m_PostInfinity: 2
+      m_RotationOrder: 4
+    attribute: m_IsActive
+    path: 
+    classID: 1
+    script: {fileID: 0}
+  - curve:
+      serializedVersion: 2
+      m_Curve:
+      - serializedVersion: 3
+        time: 0
+        value: 0
+        inSlope: 0
+        outSlope: 0
+        tangentMode: 0
+        weightedMode: 0
+        inWeight: 0
+        outWeight: 0
+      - serializedVersion: 3
+        time: 1.6666667
+        value: 0
+        inSlope: 0
+        outSlope: 0
+        tangentMode: 0
+        weightedMode: 0
+        inWeight: 0
+        outWeight: 0
+      m_PreInfinity: 2
+      m_PostInfinity: 2
+      m_RotationOrder: 4
+    attribute: dummy
+    path: 
+    classID: 1
+    script: {fileID: 0}
   m_EulerEditorCurves: []
   m_HasGenericRootTransform: 0
   m_HasMotionFloatCurves: 0
@@ -2426,6 +2590,18 @@ AnimatorController:
     m_IKPass: 0
     m_SyncedLayerAffectsTiming: 0
     m_Controller: {fileID: 9100000}
+  - serializedVersion: 5
+    m_Name: Fx Layer
+    m_StateMachine: {fileID: 4611718787671601949}
+    m_Mask: {fileID: 0}
+    m_Motions: []
+    m_Behaviours: []
+    m_BlendingMode: 0
+    m_SyncedLayerIndex: -1
+    m_DefaultWeight: 1
+    m_IKPass: 0
+    m_SyncedLayerAffectsTiming: 0
+    m_Controller: {fileID: 9100000}
 --- !u!1101 &534431928058689832
 AnimatorStateTransition:
   m_ObjectHideFlags: 1
@@ -2684,6 +2860,28 @@ AnimationClip:
   m_HasGenericRootTransform: 0
   m_HasMotionFloatCurves: 0
   m_Events: []
+--- !u!1101 &1179846140124755027
+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: -3067777464722279042}
+  m_Solo: 0
+  m_Mute: 0
+  m_IsExit: 0
+  serializedVersion: 3
+  m_TransitionDuration: 0.25
+  m_TransitionOffset: 0
+  m_ExitTime: 0.85
+  m_HasExitTime: 1
+  m_HasFixedDuration: 1
+  m_InterruptionSource: 0
+  m_OrderedInterruption: 1
+  m_CanTransitionToSelf: 1
 --- !u!74 &1280708875697387390
 AnimationClip:
   m_ObjectHideFlags: 0
@@ -2800,7 +2998,63 @@ AnimationClip:
     m_KeepOriginalPositionXZ: 0
     m_HeightFromFeet: 0
     m_Mirror: 0
-  m_EditorCurves: []
+  m_EditorCurves:
+  - curve:
+      serializedVersion: 2
+      m_Curve:
+      - serializedVersion: 3
+        time: 0
+        value: 0
+        inSlope: 0
+        outSlope: 0
+        tangentMode: 0
+        weightedMode: 0
+        inWeight: 0.33333334
+        outWeight: 0.33333334
+      - serializedVersion: 3
+        time: 1.4333334
+        value: 0
+        inSlope: 0
+        outSlope: 0
+        tangentMode: 0
+        weightedMode: 0
+        inWeight: 0.33333334
+        outWeight: 0.33333334
+      m_PreInfinity: 2
+      m_PostInfinity: 2
+      m_RotationOrder: 4
+    attribute: m_IsActive
+    path: 
+    classID: 1
+    script: {fileID: 0}
+  - curve:
+      serializedVersion: 2
+      m_Curve:
+      - serializedVersion: 3
+        time: 0
+        value: 0
+        inSlope: 0
+        outSlope: 0
+        tangentMode: 0
+        weightedMode: 0
+        inWeight: 0
+        outWeight: 0
+      - serializedVersion: 3
+        time: 1.4333334
+        value: 0
+        inSlope: 0
+        outSlope: 0
+        tangentMode: 0
+        weightedMode: 0
+        inWeight: 0
+        outWeight: 0
+      m_PreInfinity: 2
+      m_PostInfinity: 2
+      m_RotationOrder: 4
+    attribute: dummy
+    path: 
+    classID: 1
+    script: {fileID: 0}
   m_EulerEditorCurves: []
   m_HasGenericRootTransform: 0
   m_HasMotionFloatCurves: 0
@@ -2938,6 +3192,40 @@ AnimationClip:
     floatParameter: 0
     intParameter: 0
     messageOptions: 1
+--- !u!1107 &4611718787671601949
+AnimatorStateMachine:
+  serializedVersion: 6
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: Fx Layer
+  m_ChildStates:
+  - serializedVersion: 1
+    m_State: {fileID: 5387387925324183068}
+    m_Position: {x: 350, y: -10, z: 0}
+  - serializedVersion: 1
+    m_State: {fileID: -4558071603223277617}
+    m_Position: {x: 350, y: 30, z: 0}
+  - serializedVersion: 1
+    m_State: {fileID: 8530585074643866227}
+    m_Position: {x: 350, y: 70, z: 0}
+  - serializedVersion: 1
+    m_State: {fileID: -5857599271634347540}
+    m_Position: {x: 350, y: 110, z: 0}
+  - serializedVersion: 1
+    m_State: {fileID: 6962267096894828791}
+    m_Position: {x: 350, y: 150, z: 0}
+  m_ChildStateMachines: []
+  m_AnyStateTransitions: []
+  m_EntryTransitions: []
+  m_StateMachineTransitions: {}
+  m_StateMachineBehaviours: []
+  m_AnyStatePosition: {x: 50, y: 20, z: 0}
+  m_EntryPosition: {x: 50, y: 120, z: 0}
+  m_ExitPosition: {x: 800, y: 120, z: 0}
+  m_ParentStateMachinePosition: {x: 800, y: 20, z: 0}
+  m_DefaultState: {fileID: 6962267096894828791}
 --- !u!1107 &4678021159757533627
 AnimatorStateMachine:
   serializedVersion: 6
@@ -3013,6 +3301,9 @@ AnimatorStateMachine:
   - serializedVersion: 1
     m_State: {fileID: 8331176851749146257}
     m_Position: {x: 960, y: 550, z: 0}
+  - serializedVersion: 1
+    m_State: {fileID: 6835570655994795402}
+    m_Position: {x: 660, y: 590, z: 0}
   m_ChildStateMachines: []
   m_AnyStateTransitions: []
   m_EntryTransitions: []
@@ -3138,6 +3429,32 @@ AnimationClip:
     floatParameter: 0
     intParameter: 0
     messageOptions: 1
+--- !u!1102 &5387387925324183068
+AnimatorState:
+  serializedVersion: 6
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: FrozenToNormal
+  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: c74f4649e5f853f46b46c8f93d38de2f, type: 2}
+  m_Tag: 
+  m_SpeedParameter: 
+  m_MirrorParameter: 
+  m_CycleOffsetParameter: 
+  m_TimeParameter: 
 --- !u!1102 &5561397459556167838
 AnimatorState:
   serializedVersion: 6
@@ -3149,7 +3466,8 @@ AnimatorState:
   m_Speed: 1
   m_CycleOffset: 0
   m_Transitions:
-  - {fileID: -5648560309932191177}
+  - {fileID: -7497585641483262226}
+  - {fileID: 6852922595330999631}
   m_StateMachineBehaviours: []
   m_Position: {x: 50, y: 50, z: 0}
   m_IKOnFeet: 0
@@ -3272,7 +3590,35 @@ AnimationClip:
     m_KeepOriginalPositionXZ: 0
     m_HeightFromFeet: 0
     m_Mirror: 0
-  m_EditorCurves: []
+  m_EditorCurves:
+  - curve:
+      serializedVersion: 2
+      m_Curve:
+      - serializedVersion: 3
+        time: 0
+        value: 0
+        inSlope: 0
+        outSlope: 0
+        tangentMode: 0
+        weightedMode: 0
+        inWeight: 0
+        outWeight: 0
+      - serializedVersion: 3
+        time: 1.6666667
+        value: 0
+        inSlope: 0
+        outSlope: 0
+        tangentMode: 0
+        weightedMode: 0
+        inWeight: 0
+        outWeight: 0
+      m_PreInfinity: 2
+      m_PostInfinity: 2
+      m_RotationOrder: 4
+    attribute: dummy
+    path: 
+    classID: 1
+    script: {fileID: 0}
   m_EulerEditorCurves: []
   m_HasGenericRootTransform: 0
   m_HasMotionFloatCurves: 0
@@ -3363,6 +3709,81 @@ AnimationClip:
   m_HasGenericRootTransform: 0
   m_HasMotionFloatCurves: 0
   m_Events: []
+--- !u!1102 &6835570655994795402
+AnimatorState:
+  serializedVersion: 6
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: roar_no3
+  m_Speed: 1
+  m_CycleOffset: 0
+  m_Transitions:
+  - {fileID: 1179846140124755027}
+  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: -7080057319647059731}
+  m_Tag: 
+  m_SpeedParameter: 
+  m_MirrorParameter: 
+  m_CycleOffsetParameter: 
+  m_TimeParameter: 
+--- !u!1101 &6852922595330999631
+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: -1702708306969596229}
+  m_Solo: 0
+  m_Mute: 0
+  m_IsExit: 0
+  serializedVersion: 3
+  m_TransitionDuration: 0.25
+  m_TransitionOffset: 0
+  m_ExitTime: 0.85
+  m_HasExitTime: 1
+  m_HasFixedDuration: 1
+  m_InterruptionSource: 0
+  m_OrderedInterruption: 1
+  m_CanTransitionToSelf: 1
+--- !u!1102 &6962267096894828791
+AnimatorState:
+  serializedVersion: 6
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: Normal
+  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: 6fe0e5a925ea0ed499a0ced169c6ae83, type: 2}
+  m_Tag: 
+  m_SpeedParameter: 
+  m_MirrorParameter: 
+  m_CycleOffsetParameter: 
+  m_TimeParameter: 
 --- !u!1102 &7491584853838781276
 AnimatorState:
   serializedVersion: 6
@@ -3505,14 +3926,70 @@ AnimationClip:
     m_KeepOriginalPositionXZ: 0
     m_HeightFromFeet: 0
     m_Mirror: 0
-  m_EditorCurves: []
+  m_EditorCurves:
+  - curve:
+      serializedVersion: 2
+      m_Curve:
+      - serializedVersion: 3
+        time: 0
+        value: 0
+        inSlope: 0
+        outSlope: 0
+        tangentMode: 0
+        weightedMode: 0
+        inWeight: 0.33333334
+        outWeight: 0.33333334
+      - serializedVersion: 3
+        time: 3.3333335
+        value: 0
+        inSlope: 0
+        outSlope: 0
+        tangentMode: 0
+        weightedMode: 0
+        inWeight: 0.33333334
+        outWeight: 0.33333334
+      m_PreInfinity: 2
+      m_PostInfinity: 2
+      m_RotationOrder: 4
+    attribute: m_IsActive
+    path: 
+    classID: 1
+    script: {fileID: 0}
+  - curve:
+      serializedVersion: 2
+      m_Curve:
+      - serializedVersion: 3
+        time: 0
+        value: 0
+        inSlope: 0
+        outSlope: 0
+        tangentMode: 0
+        weightedMode: 0
+        inWeight: 0
+        outWeight: 0
+      - serializedVersion: 3
+        time: 1.4333334
+        value: 0
+        inSlope: 0
+        outSlope: 0
+        tangentMode: 0
+        weightedMode: 0
+        inWeight: 0
+        outWeight: 0
+      m_PreInfinity: 2
+      m_PostInfinity: 2
+      m_RotationOrder: 4
+    attribute: dummy
+    path: 
+    classID: 1
+    script: {fileID: 0}
   m_EulerEditorCurves: []
   m_HasGenericRootTransform: 0
   m_HasMotionFloatCurves: 0
   m_Events:
   - time: 1.3333334
-    functionName: smoke
-    data: SpineEvent
+    functionName: shoot
+    data: 
     objectReferenceParameter: {fileID: 0}
     floatParameter: 0
     intParameter: 0
@@ -3737,6 +4214,32 @@ AnimatorState:
   m_MirrorParameter: 
   m_CycleOffsetParameter: 
   m_TimeParameter: 
+--- !u!1102 &8530585074643866227
+AnimatorState:
+  serializedVersion: 6
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: TurnWhite
+  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: 30b12984e6525444d92a15d9c2e59c92, type: 2}
+  m_Tag: 
+  m_SpeedParameter: 
+  m_MirrorParameter: 
+  m_CycleOffsetParameter: 
+  m_TimeParameter: 
 --- !u!74 &9211576881899191406
 AnimationClip:
   m_ObjectHideFlags: 0

+ 0 - 8
ActionTowerDefense/Assets/Scripts/Boss/Boss.cs

@@ -686,14 +686,6 @@ public class Boss : MoveCharacter
     public override void Update()
     {
         base.Update();
-
-        if(bossPhase < statOfPhase.Length - 1)
-        {
-            if((float)hp / (float)totalHp < statOfPhase[bossPhase + 1].hpRadioThreshold)
-            {
-                ChangePhase();
-            }
-        }
     }
 }
 

+ 17 - 22
ActionTowerDefense/Assets/Scripts/Boss/WaterGhost/BlackUmbrella.cs

@@ -61,7 +61,7 @@ public class BlackUmbrella : MonoBehaviour
     public float disappearTime;
     [LabelText("黑伞位置提示特效")]
     //public GameObject effect;
-    public GameObject effectIns;
+    public Bullet effectIns;
     private SpriteRenderer effectInsSr;
     public float initialTransparency = 0.5f;
     //提示X坐标
@@ -81,7 +81,7 @@ public class BlackUmbrella : MonoBehaviour
         attackCon = owner.GetComponent<WaterSpriteAttackController>();
         pc = PlayersInput.instance[0];
         ani.runtimeAnimatorController = rac;
-        effectIns.GetComponent<Bullet>().owner = ws;
+        effectIns.owner = ws;
     }
 
     //放出这个攻击!
@@ -135,11 +135,6 @@ public class BlackUmbrella : MonoBehaviour
                 break;
             case UmbrellaState.back:
                 OnBack?.Invoke();
-                //if(transform.position.y < 4)
-                //{
-                //    origPos = transform.position;
-                //    aimPos = new Vector3(transform.position.x, 4, transform.position.z);
-                //}
                 umbrePastTime = 0f;
                 break;
             case UmbrellaState.disappear:
@@ -165,16 +160,23 @@ public class BlackUmbrella : MonoBehaviour
                 }
                 break;
             case UmbrellaState.sprint:
-                float distanceCovered = umbrePastTime * initialSpeed;
-                float fraction = distanceCovered / attackDis;
-                float dec = 1 - (1 - fraction) * (1 - fraction);
-                transform.position = Vector3.Lerp(origPos, aimPos, dec);
                 if (Mathf.Abs(transform.position.x - aimPos.x) <= 0.2f)
                 {
                     transform.position = aimPos;
                     umbrePastTime = 0;
                     ChangeUmbrellaState(UmbrellaState.stay);
                 }
+                else if (Mathf.Abs(transform.position.x - aimPos.x) <= 5f)
+                {
+                    float distanceCovered = umbrePastTime * initialSpeed;
+                    float fraction = distanceCovered / attackDis;
+                    float dec = 1 - (1 - fraction) * (1 - fraction);
+                    transform.position = Vector3.Lerp(transform.position, aimPos, dec);
+                }
+                else
+                {
+                    transform.position += (aimPos - origPos).normalized * initialSpeed * Time.fixedDeltaTime;
+                }
                 break;
             case UmbrellaState.stay:
                 if (allTime < 0)
@@ -207,14 +209,6 @@ public class BlackUmbrella : MonoBehaviour
                     hasBackAni = true;
                     attackCon.isUmbrellaBack = true;
                 }
-                //if(transform.position.y < 4)
-                //{
-                //    //Debug.Log(umbrePastTime);
-                //    float distanceCovered1 = umbrePastTime * initialSpeed;
-                //    float fraction1 = distanceCovered1 / (4-transform.position.y);
-                //    float dec1 = 1 - (1 - fraction1) * (1 - fraction1);
-                //    transform.position = Vector3.Lerp(origPos, aimPos, umbrePastTime);
-                //}
                 break;
             case UmbrellaState.disappear:
                 if (umbrePastTime >= disappearTime)
@@ -277,6 +271,7 @@ public class BlackUmbrella : MonoBehaviour
 
         if (/*!IsTargetVisible(gameObject) && */umbrellaState == UmbrellaState.stay && allTime > -1)
         {
+            if (effectIns.owner == null) effectIns.owner = ws;
             if (isAboutToAttack)
             {
                 // 剩余时间在0-1秒之间,计算透明度(0.5 -> 1.0)
@@ -313,11 +308,11 @@ public class BlackUmbrella : MonoBehaviour
             //    effectIns.transform.position = pos;
                 //effectIns.transform.localEulerAngles = new Vector3(-0.8f, 0.1f, 1);
             //}
-            effectIns.SetActive(true);
+            effectIns.gameObject.SetActive(true);
         }
         else
         {
-            effectIns.SetActive(false);
+            effectIns.gameObject.SetActive(false);
             // 重置透明度为半透明,避免下次显示时状态错误
             color = effectInsSr.color;
             if (color.a != initialTransparency)
@@ -326,7 +321,7 @@ public class BlackUmbrella : MonoBehaviour
                 effectInsSr.color = color;
             }
 
-            effectIns.SetActive(false);
+            effectIns.gameObject.SetActive(false);
         }
     }
 

+ 1 - 1
ActionTowerDefense/Assets/Scripts/Boss/WaterGhost/HairSprint.cs

@@ -201,7 +201,7 @@ public class HairSprint : MonoBehaviour
                 else
                 {
                     ChangeHairState(HairState.none);
-                    ws.EndCurAttackState(true);
+                     if(ws.isAngry) ws.EndCurAttackState(true);
                 }
                 break;
         }

+ 38 - 25
ActionTowerDefense/Assets/Scripts/Boss/WaterGhost/WaterSprite.cs

@@ -75,9 +75,12 @@ public class WaterSprite : Boss
     [FoldoutGroup("状态提示")] public bool isAngry = false;
     [FoldoutGroup("状态提示")] public bool isTakingUmbre = false;
     [FoldoutGroup("状态提示")] public bool isHoldingUmbre = true;
+    [FoldoutGroup("状态提示")] public bool isReadyChangStage = false;
+    [FoldoutGroup("状态提示")] public bool isAppearing = false;
     private Coroutine shootCoroutine;
     private float hairAttackTimer;
     public GameObject smokeShell;
+    public GameObject summonStart;
 
     public override void Init()
     {
@@ -87,7 +90,7 @@ public class WaterSprite : Boss
         jumpMoveCS.ws = this;
         nextAimHP = (int)(changeStateHPPer[changeHPID] / 100f * totalHp);
         changeHPID++;
-        curInterval = 6f;
+        curInterval = statOfPhase[bossPhase].maxInterval;
         StartCoroutine(Appear());
     }
 
@@ -95,8 +98,15 @@ public class WaterSprite : Boss
     {
         base.Update();
         OnStage();
+        if (bossPhase < statOfPhase.Length - 1)
+        {
+            if ((float)hp / (float)totalHp < statOfPhase[bossPhase + 1].hpRadioThreshold)
+            {
+                ChangePhase();
+            }
+        }
 
-        if(isAngry)
+        if (isAngry)
         {
             if (angryTimer >= 0) angryTimer -= Time.deltaTime;
             else
@@ -126,7 +136,7 @@ public class WaterSprite : Boss
         base.BeHit(attackMethod, attackFrom, damage);
         if (hp <= nextAimHP)
         {
-            ChangeStage(BossStage.polliwog);
+            isReadyChangStage = true;
         }
     }
 
@@ -196,7 +206,7 @@ public class WaterSprite : Boss
     #region 状态相关
     public override void ChangeState(CharacterState newState)
     {
-        if (state == newState || newState == CharacterState.FramePause)
+        if (state == newState || newState == CharacterState.FramePause || isAppearing)
         {
             return;
         }
@@ -250,6 +260,8 @@ public class WaterSprite : Boss
             default:
                 break;
         }
+        spineEvent.isAttackOn = false;
+        spineEvent.isAttackOff = false;
     }
 
     public override void OnState()
@@ -258,23 +270,15 @@ public class WaterSprite : Boss
         switch (state)
         {
             case CharacterState.Idle:
-                if (isTakingUmbre)
+                if (isReadyChangStage)
+                {
+                    ChangeBossState(BossState.invincible);
+                    ani.Play("fall");
+                    if (spineEvent.isAttackOn) ChangeStage(BossStage.polliwog);
+                    return;
+                }
+                else if (isTakingUmbre)
                 {
-                    //if (Time.time - bodyFlickerTimer > bodyFlickerTime && isDisappear)
-                    //{
-                    //    curInterval = 1;
-                    //    transform.position = wsAttackController.blackUmbrella.transform.position - wsAttackController.umbrellaBackPos.position + transform.position;
-                    //    EndCurAttackState(true);
-                    //    BodyFlickerAppear();
-                    //    ani.Play("shoot_end");
-                    //    isTakingUmbre = false;
-                    //    wsAttackController.blackUmbrella.BeTaken();
-                    //}
-                    //else if (spineEvent.isAttackOn)
-                    //{
-                    //    spineEvent.isAttackOn = false;
-                    //    BodyFlickerDisappear();
-                    //}
                     return;
                 }
 
@@ -303,6 +307,7 @@ public class WaterSprite : Boss
                 break;
             case CharacterState.Run:
                 OnMove();
+                if (isReadyChangStage) ChangeState(CharacterState.Idle);
                 break;
             case CharacterState.Attack:
                 OnAttack();
@@ -357,6 +362,7 @@ public class WaterSprite : Boss
         ChangeBossState(BossState.invincible);
         PoolManager.Instantiate(smokeShell, transform.position);
         bodyTrans.gameObject.SetActive(false);
+        isAppearing = true;
         yield return new WaitForSeconds(1.5f);
         bodyTrans.gameObject.SetActive(true);
         ani.Play("smoke");
@@ -364,6 +370,7 @@ public class WaterSprite : Boss
         spineEvent.isAttackOn = false;
         ChangeBossState(BossState.normal);
         ani.Play("idle");
+        isAppearing = false;
     }
 
     #region 形态相关
@@ -373,10 +380,12 @@ public class WaterSprite : Boss
         {
             return;
         }
+        isReadyChangStage = false;
         curBossStage = bs;
         switch (bs)
         {
             case BossStage.waterSprite:
+                curInterval = Random.Range(statOfPhase[bossPhase].minInterval, statOfPhase[bossPhase].maxInterval);
                 if (changeHPID < changeStateHPPer.Length - 1)
                 {
                     nextAimHP = (int)(changeStateHPPer[changeHPID] / 100f * totalHp);
@@ -391,6 +400,7 @@ public class WaterSprite : Boss
                 pws.AllPoliDie();
                 break;
             case BossStage.polliwog:
+                PoolManager.Instantiate(summonStart, transform.position);
                 pastPoliTime = 0;
                 bodyTrans.gameObject.SetActive(false);
                 //在原地召唤一堆蝌蚪
@@ -426,7 +436,6 @@ public class WaterSprite : Boss
     public override void Attack()
     {
         attackCount--;
-        spineEvent.isAttackOn = false;
         switch (curAttackType)
         {
             case AttackMethods.Move:
@@ -436,9 +445,11 @@ public class WaterSprite : Boss
             case AttackMethods.Umbrella:
                 isHoldingUmbre = false;
                 ani.Play("shoot");
+                attack.SkillBlackUmbrella();
                 break;
             case AttackMethods.Hair:
-                ani.Play("roar");
+                if (isHoldingUmbre) ani.Play("roar");
+                else ani.Play("roar_no3");
                 int attackTimes = 0;
                 switch (bossPhase)
                 {
@@ -476,12 +487,15 @@ public class WaterSprite : Boss
                 if (spineEvent.isAttackOn)
                 {
                     spineEvent.isAttackOn = false;
-                    attack.SkillBlackUmbrella();
                     attack.BlackUmbrellaRelease();
-                    ChangeState(CharacterState.Run);
+                    EndCurAttackState(true);
                 }
                 break;
             case AttackMethods.Hair:
+                if (Time.time - hairAttackTimer > 1.67f)
+                {
+                    EndCurAttackState(true);
+                }
                 break;
             case AttackMethods.Shoot:
                 if (Time.time - bodyFlickerTimer > bodyFlickerTime)
@@ -521,7 +535,6 @@ public class WaterSprite : Boss
                                 break;
                         }  
                         EndCurAttackState(true);
-                        ChangeState(CharacterState.Run);
                     }
                 }
                 else

+ 1 - 0
ActionTowerDefense/Assets/Scripts/Boss/WaterGhost/WaterSpriteAttackController.cs

@@ -57,6 +57,7 @@ public class WaterSpriteAttackController : AttackController
     public void BlackUmbrellaRelease()
     {
         blackUmbrella.Release();
+        Debug.Log("É¡ÊÍ·Å");
     }
 
     public void OnBlackUmbrella()

+ 63 - 36
ActionTowerDefense/Assets/Scripts/Characters/Polliwog.cs

@@ -33,8 +33,11 @@ public class Polliwog : Enemy
     public bool isInGroup = true;
 
     public BoxCollider attackTrigger;
-    public bool isReturn = false;
     [LabelText("¼õËÙ¾àÀëãÐÖµ")] public float decelerationDistanceThreshold;
+    public bool isRush;
+    public float rushTime = 1f;
+    private float rushTimer;
+    public Vector2 rushDir;
     public override void Awake()
     {
         base.Awake();
@@ -48,7 +51,7 @@ public class Polliwog : Enemy
             return;
         }
         base.OnEnable();
-        isReturn = false;
+        rushTimer = 0;
         rb.isKinematic = true;
         PolliwogManager.GetInstance().AddPolliwog(this);
         isDie = false;
@@ -164,6 +167,7 @@ public class Polliwog : Enemy
         dieKeepTime -= Time.deltaTime;
         invincibleTime -= Time.deltaTime;
         pastAttackTime += Time.deltaTime;
+        rushTimer += Time.deltaTime;
         Vector3 leftDir = GetMoveDir();
         bool isAttack = GetAttack();
         Quaternion targetQt = Quaternion.Euler(Vector3.zero);
@@ -173,46 +177,70 @@ public class Polliwog : Enemy
                 ChangeState(CharacterState.Run);
                 break;
             case CharacterState.Run:
-                Vector2 toPlayer = playerTarget.position - transform.position;
-                float targetAngle = Vector2.SignedAngle(Vector2.left, toPlayer); ;
-                float desiredAngle = targetAngle;
-                bool applyFlock = Random.Range(0, 100) <= correctionProbability;
-                if (applyFlock)
+                if(rushTimer > rushTime)
                 {
-                    UpdateNearbyFish();
-                    Vector2 separation = CalculateMove1();
-                    Vector2 alignment = CalculateMove3();
-                    Vector2 cohesion = CalculateMove2();
+                    Vector2 toPlayer = playerTarget.position - transform.position;
+                    float targetAngle = Vector2.SignedAngle(Vector2.left, toPlayer); ;
+                    float desiredAngle = targetAngle;
+                    bool applyFlock = Random.Range(0, 100) <= correctionProbability;
+                    if (applyFlock)
+                    {
+                        UpdateNearbyFish();
+                        Vector2 separation = CalculateMove1();
+                        Vector2 alignment = CalculateMove3();
+                        Vector2 cohesion = CalculateMove2();
 
-                    Vector2 combinedMove = (separation * separationWeight +
-                                          cohesion * cohesionWeight +
-                                          alignment * alignmentWeight);
+                        Vector2 combinedMove = (separation * separationWeight +
+                                              cohesion * cohesionWeight +
+                                              alignment * alignmentWeight);
 
-                    float flockAngle = combinedMove != Vector2.zero ?
-                        Vector2.SignedAngle(Vector2.left, combinedMove) : targetAngle;
-                    desiredAngle = Mathf.LerpAngle(targetAngle, flockAngle, flockInfluence);
-                }
-                float newAngle = Mathf.SmoothDampAngle(
-                    transform.eulerAngles.z,
-                    desiredAngle,
-                    ref currentAngleVelocity,
-                    1f / rotationSmoothing,
-                    rotationSpeed * 2f,
-                    Time.fixedDeltaTime
-                );
+                        float flockAngle = combinedMove != Vector2.zero ?
+                            Vector2.SignedAngle(Vector2.left, combinedMove) : targetAngle;
+                        desiredAngle = Mathf.LerpAngle(targetAngle, flockAngle, flockInfluence);
+                    }
+                    float newAngle = Mathf.SmoothDampAngle(
+                        transform.eulerAngles.z,
+                        desiredAngle,
+                        ref currentAngleVelocity,
+                        1f / rotationSmoothing,
+                        rotationSpeed * 2f,
+                        Time.fixedDeltaTime
+                    );
 
-                transform.rotation = Quaternion.Euler(0, 0, newAngle);
-                currentVelocity = -transform.right * moveSpeed;
-                if (!attackController.curAttackMethod.attackTrigger.gameObject.activeSelf)
-                {
-                    attackController.curAttackMethod.attackTrigger.gameObject.SetActive(true);
+                    transform.rotation = Quaternion.Euler(0, 0, newAngle);
+                    currentVelocity = -transform.right * moveSpeed;
+                    if (!attackController.curAttackMethod.attackTrigger.gameObject.activeSelf)
+                    {
+                        attackController.curAttackMethod.attackTrigger.gameObject.SetActive(true);
+                    }
+                    float scale = 1;
+                    if (Vector3.Distance(transform.position, playerTarget.position) < decelerationDistanceThreshold)
+                    {
+                        scale = Mathf.Max(0.3f, Vector3.Distance(transform.position, playerTarget.position) / decelerationDistanceThreshold);
+                    }
+                    transform.position += (Vector3)currentVelocity * Time.fixedDeltaTime * scale;
                 }
-                float scale = 1;
-                if(Vector3.Distance(transform.position, playerTarget.position) < decelerationDistanceThreshold)
+                else
                 {
-                    scale = Mathf.Max(0.5f, Vector3.Distance(transform.position, playerTarget.position)/decelerationDistanceThreshold);
+                    float targetAngle = Vector2.SignedAngle(Vector2.left, rushDir);
+                    float desiredAngle = targetAngle;
+                    float newAngle = Mathf.SmoothDampAngle(
+                        transform.eulerAngles.z,
+                        desiredAngle,
+                        ref currentAngleVelocity,
+                        1f / rotationSmoothing,
+                        rotationSpeed * 2f,
+                        Time.fixedDeltaTime
+                    );
+
+                    transform.rotation = Quaternion.Euler(0, 0, newAngle);
+                    currentVelocity = -transform.right * moveSpeed;
+                    if (!attackController.curAttackMethod.attackTrigger.gameObject.activeSelf)
+                    {
+                        attackController.curAttackMethod.attackTrigger.gameObject.SetActive(true);
+                    }
+                    transform.position += (Vector3)currentVelocity * Time.fixedDeltaTime;
                 }
-                transform.position += (Vector3)currentVelocity * Time.fixedDeltaTime * scale;
                 break;
             case CharacterState.Die:
                 currentVelocity = Vector2.zero;
@@ -308,7 +336,6 @@ public class Polliwog : Enemy
     public void StartReturn(Transform target)
     {
         playerTarget = target;
-        isReturn = true;
         ChangeState(CharacterState.Run);
     }
 }

+ 2 - 1
ActionTowerDefense/Assets/Scripts/PolliwogShot.cs

@@ -41,10 +41,11 @@ public class PolliwogShot : SpecialSkills
         for (int i = 0; i < numm; i++)
         {
             if (PolliwogManager.GetInstance().IsFull()) break;
-            PoolManager.InstantiateAsync("Prefab/Enemy/Enemy_Polliwog", poss + new Vector3(Random.Range(-5,5), Random.Range(-5, 5), 0), new Quaternion(0, 0, 0, 0), null, obj =>
+            PoolManager.InstantiateAsync("Prefab/Enemy/Enemy_Polliwog", poss + new Vector3(Random.Range(-3,3), Random.Range(-3, 3), 0), new Quaternion(0, 0, 0, 0), null, obj =>
             {
                 Polliwog pol = obj.GetComponent<Polliwog>();
                 pollis.Add(pol);
+                pol.rushDir = (pol.transform.position - poss).normalized;
             });
         }
     }