Ver Fonte

空中平台

LAPTOP-OM1V99U2\永远de小亡灵 há 1 ano atrás
pai
commit
a715e2473e
20 ficheiros alterados com 347 adições e 185 exclusões
  1. 3 3
      ActionTowerDefense/Assets/Animations/Demonic_Sword/DemonicSwordCollider_Fall.anim
  2. 3 3
      ActionTowerDefense/Assets/Animations/Enemy_Sword/EnemySwordCollider_Fall.anim
  3. 46 1
      ActionTowerDefense/Assets/Animations/Player/PlayerCollider_Rise.anim
  4. 1 1
      ActionTowerDefense/Assets/Animations/Spirits_Assassin/SpiritsAssassinCollider.controller
  5. 1 1
      ActionTowerDefense/Assets/Animations/Spirits_Cook/SpiritsCookCollider_Fall.anim
  6. 4 3
      ActionTowerDefense/Assets/Resources/Prefab/Demonic_Arrow.prefab
  7. 4 3
      ActionTowerDefense/Assets/Resources/Prefab/Demonic_Giant.prefab
  8. 4 5
      ActionTowerDefense/Assets/Resources/Prefab/ESpirits_Cook.prefab
  9. 3 6
      ActionTowerDefense/Assets/Resources/Prefab/ESpirits_Invisible.prefab
  10. 6 4
      ActionTowerDefense/Assets/Resources/Prefab/Enemy_Arrow.prefab
  11. 5 8
      ActionTowerDefense/Assets/Resources/Prefab/Enemy_Giant.prefab
  12. 6 1
      ActionTowerDefense/Assets/Resources/Prefab/MySpirit/Spirits_Invisible.prefab
  13. 103 5
      ActionTowerDefense/Assets/Scenes/SampleScene.unity
  14. 2 0
      ActionTowerDefense/Assets/Scripts/Enemy.cs
  15. 2 0
      ActionTowerDefense/Assets/Scripts/EnemyTower.cs
  16. 7 6
      ActionTowerDefense/Assets/Scripts/Spirits/ESpirits_Invisible.cs
  17. 9 3
      ActionTowerDefense/Assets/Scripts/Spirits/SoulFollowEffect.cs
  18. 44 31
      ActionTowerDefense/Assets/Scripts/Spirits/Spirits_Invisible.cs
  19. 91 83
      ActionTowerDefense/Assets/Scripts/Spirits/Trans_Assassin.cs
  20. 3 18
      ActionTowerDefense/Assets/Scripts/Tower.cs

+ 3 - 3
ActionTowerDefense/Assets/Animations/Demonic_Sword/DemonicSwordCollider_Fall.anim

@@ -7,7 +7,7 @@ AnimationClip:
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
   m_Name: DemonicSwordCollider_Fall
-  serializedVersion: 6
+  serializedVersion: 7
   m_Legacy: 0
   m_Compressed: 0
   m_UseHighQualityCurve: 1
@@ -22,7 +22,7 @@ AnimationClip:
       m_Curve:
       - serializedVersion: 3
         time: 0
-        value: 0.72
+        value: 0.24
         inSlope: 0
         outSlope: 0
         tangentMode: 136
@@ -156,7 +156,7 @@ AnimationClip:
       m_Curve:
       - serializedVersion: 3
         time: 0
-        value: 0.72
+        value: 0.24
         inSlope: 0
         outSlope: 0
         tangentMode: 136

+ 3 - 3
ActionTowerDefense/Assets/Animations/Enemy_Sword/EnemySwordCollider_Fall.anim

@@ -7,7 +7,7 @@ AnimationClip:
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
   m_Name: EnemySwordCollider_Fall
-  serializedVersion: 6
+  serializedVersion: 7
   m_Legacy: 0
   m_Compressed: 0
   m_UseHighQualityCurve: 1
@@ -22,7 +22,7 @@ AnimationClip:
       m_Curve:
       - serializedVersion: 3
         time: 0
-        value: 0.72
+        value: 0.18
         inSlope: 0
         outSlope: 0
         tangentMode: 136
@@ -156,7 +156,7 @@ AnimationClip:
       m_Curve:
       - serializedVersion: 3
         time: 0
-        value: 0.72
+        value: 0.18
         inSlope: 0
         outSlope: 0
         tangentMode: 136

+ 46 - 1
ActionTowerDefense/Assets/Animations/Player/PlayerCollider_Rise.anim

@@ -7,7 +7,7 @@ AnimationClip:
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
   m_Name: PlayerCollider_Rise
-  serializedVersion: 6
+  serializedVersion: 7
   m_Legacy: 0
   m_Compressed: 0
   m_UseHighQualityCurve: 1
@@ -150,6 +150,25 @@ AnimationClip:
     path: SprintLinkTrigger
     classID: 1
     script: {fileID: 0}
+  - curve:
+      serializedVersion: 2
+      m_Curve:
+      - serializedVersion: 3
+        time: 0
+        value: 0
+        inSlope: Infinity
+        outSlope: Infinity
+        tangentMode: 103
+        weightedMode: 0
+        inWeight: 0
+        outWeight: 0
+      m_PreInfinity: 2
+      m_PostInfinity: 2
+      m_RotationOrder: 4
+    attribute: m_IsActive
+    path: BodyCollider
+    classID: 1
+    script: {fileID: 0}
   m_PPtrCurves: []
   m_SampleRate: 60
   m_WrapMode: 0
@@ -165,6 +184,13 @@ AnimationClip:
       typeID: 1
       customType: 0
       isPPtrCurve: 0
+    - serializedVersion: 2
+      path: 3066340498
+      attribute: 2086281974
+      script: {fileID: 0}
+      typeID: 1
+      customType: 0
+      isPPtrCurve: 0
     - serializedVersion: 2
       path: 3066340498
       attribute: 4197328169
@@ -362,6 +388,25 @@ AnimationClip:
     path: SprintLinkTrigger
     classID: 1
     script: {fileID: 0}
+  - curve:
+      serializedVersion: 2
+      m_Curve:
+      - serializedVersion: 3
+        time: 0
+        value: 0
+        inSlope: Infinity
+        outSlope: Infinity
+        tangentMode: 103
+        weightedMode: 0
+        inWeight: 0
+        outWeight: 0
+      m_PreInfinity: 2
+      m_PostInfinity: 2
+      m_RotationOrder: 4
+    attribute: m_IsActive
+    path: BodyCollider
+    classID: 1
+    script: {fileID: 0}
   m_EulerEditorCurves: []
   m_HasGenericRootTransform: 0
   m_HasMotionFloatCurves: 0

+ 1 - 1
ActionTowerDefense/Assets/Animations/Spirits_Assassin/SpiritsAssassinCollider.controller

@@ -20,7 +20,7 @@ AnimatorState:
   m_MirrorParameterActive: 0
   m_CycleOffsetParameterActive: 0
   m_TimeParameterActive: 0
-  m_Motion: {fileID: 7400000, guid: 53cff01eefde73d4690c75c7ccfb9606, type: 2}
+  m_Motion: {fileID: 7400000, guid: d3c7db98e6e13bb4892b7643bc4d2cdd, type: 2}
   m_Tag: 
   m_SpeedParameter: 
   m_MirrorParameter: 

+ 1 - 1
ActionTowerDefense/Assets/Animations/Spirits_Cook/SpiritsCookCollider_Fall.anim

@@ -7,7 +7,7 @@ AnimationClip:
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
   m_Name: SpiritsCookCollider_Fall
-  serializedVersion: 6
+  serializedVersion: 7
   m_Legacy: 0
   m_Compressed: 0
   m_UseHighQualityCurve: 1

+ 4 - 3
ActionTowerDefense/Assets/Resources/Prefab/Demonic_Arrow.prefab

@@ -390,7 +390,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 1
+  m_IsActive: 0
 --- !u!4 &3215317859961215224
 Transform:
   m_ObjectHideFlags: 0
@@ -1075,6 +1075,7 @@ MonoBehaviour:
   rapidFallSpeed: 30
   curFallSpeed: 0
   floatState: 0
+  matState: 1
   spinee: {fileID: 0}
   mesh: {fileID: 0}
   mats: []
@@ -1094,12 +1095,12 @@ MonoBehaviour:
   playerMesh: {fileID: 0}
   playerMats: []
   playerOut: []
-  isInvisible: 0
   canNotChangeHurt: 0
   soulPrefab: {fileID: 0}
   soulStartSpeed: 1
+  isInvisible: 0
+  invisibleTime: 0
   easyToGetHit: 0.2
-  isInvincible: 0
   player: {fileID: 0}
   id: 0
   costMp: 25

+ 4 - 3
ActionTowerDefense/Assets/Resources/Prefab/Demonic_Giant.prefab

@@ -363,7 +363,7 @@ BoxCollider:
   m_IsTrigger: 1
   m_Enabled: 1
   serializedVersion: 2
-  m_Size: {x: 1, y: 0.003, z: 20}
+  m_Size: {x: 2.27, y: 0.003, z: 20}
   m_Center: {x: 0, y: 0, z: 0}
 --- !u!114 &5440846222604650418
 MonoBehaviour:
@@ -521,6 +521,7 @@ MonoBehaviour:
   rapidFallSpeed: 30
   curFallSpeed: 0
   floatState: 0
+  matState: 1
   spinee: {fileID: 0}
   mesh: {fileID: 0}
   mats: []
@@ -540,12 +541,12 @@ MonoBehaviour:
   playerMesh: {fileID: 0}
   playerMats: []
   playerOut: []
-  isInvisible: 0
   canNotChangeHurt: 0
   soulPrefab: {fileID: 0}
   soulStartSpeed: 1
+  isInvisible: 0
+  invisibleTime: 0
   easyToGetHit: 0.2
-  isInvincible: 0
   player: {fileID: 0}
   id: 0
   costMp: 150

+ 4 - 5
ActionTowerDefense/Assets/Resources/Prefab/ESpirits_Cook.prefab

@@ -728,7 +728,7 @@ BoxCollider:
   m_IsTrigger: 1
   m_Enabled: 1
   serializedVersion: 2
-  m_Size: {x: 1, y: 0.003, z: 20}
+  m_Size: {x: 2.13, y: 0.003, z: 20}
   m_Center: {x: 0, y: 0, z: 0}
 --- !u!114 &5440846222604650418
 MonoBehaviour:
@@ -872,8 +872,6 @@ MonoBehaviour:
   attackToFloat: 0
   floatTimes: 0
   hasFloatTimes: 0
-  isSoulUnstable: 0
-  soulUnstableTime: 0
   criticalChance: 0
   criticalMultiplier: 0
   canMove: 0
@@ -907,6 +905,7 @@ MonoBehaviour:
   rapidFallSpeed: 30
   curFallSpeed: 0
   floatState: 0
+  matState: 1
   spinee: {fileID: 0}
   mesh: {fileID: 0}
   mats: []
@@ -928,12 +927,12 @@ MonoBehaviour:
   playerMesh: {fileID: 0}
   playerMats: []
   playerOut: []
-  isInvisible: 0
   canNotChangeHurt: 0
   soulPrefab: {fileID: 1723151111827507807, guid: e2b65aa482f2f1447a4074208d72b778, type: 3}
   soulStartSpeed: 1
+  isInvisible: 0
+  invisibleTime: 0
   easyToGetHit: 0.2
-  canNotBeHit: 0
   id: 0
   jumpSpeed: 9
   searchState: 0

+ 3 - 6
ActionTowerDefense/Assets/Resources/Prefab/ESpirits_Invisible.prefab

@@ -750,10 +750,12 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 93b437b250872de40ae6544c67e67b5b, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
+  upSpeed: 0
+  notFind: 0
   angle: 0
   soulsNumber: 0
   rotateSpeed: 90
-  soul: {fileID: 1891440660381530207}
+  soul: {fileID: 1723151111827507807, guid: e2b65aa482f2f1447a4074208d72b778, type: 3}
   soul1: {fileID: 7282297442632128276}
   eSpirits: {fileID: 3269304469610989911}
   soulsList: []
@@ -1255,11 +1257,6 @@ PrefabInstance:
       objectReference: {fileID: 0}
     m_RemovedComponents: []
   m_SourcePrefab: {fileID: 100100000, guid: a956ce2c24a9a8b4b98cbf27ef623367, type: 3}
---- !u!1 &1891440660381530207 stripped
-GameObject:
-  m_CorrespondingSourceObject: {fileID: 3129693219121881914, guid: a956ce2c24a9a8b4b98cbf27ef623367, type: 3}
-  m_PrefabInstance: {fileID: 3553718495943334757}
-  m_PrefabAsset: {fileID: 0}
 --- !u!114 &2061548984477852820 stripped
 MonoBehaviour:
   m_CorrespondingSourceObject: {fileID: 3300381806182711281, guid: a956ce2c24a9a8b4b98cbf27ef623367, type: 3}

+ 6 - 4
ActionTowerDefense/Assets/Resources/Prefab/Enemy_Arrow.prefab

@@ -390,7 +390,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 1
+  m_IsActive: 0
 --- !u!4 &3215317859961215224
 Transform:
   m_ObjectHideFlags: 0
@@ -970,6 +970,7 @@ MonoBehaviour:
   m_EditorClassIdentifier: 
   isTran: 0
   pc: {fileID: 0}
+  isSpirit: 0
   HitCols:
   - {fileID: 5388987656270167698}
   - {fileID: 1190225091429982147}
@@ -1041,8 +1042,6 @@ MonoBehaviour:
   attackToFloat: 0
   floatTimes: 0
   hasFloatTimes: 0
-  isSoulUnstable: 0
-  soulUnstableTime: 0
   criticalChance: 0
   criticalMultiplier: 0
   canMove: 1
@@ -1076,6 +1075,7 @@ MonoBehaviour:
   rapidFallSpeed: 30
   curFallSpeed: 0
   floatState: 0
+  matState: 1
   spinee: {fileID: 0}
   mesh: {fileID: 0}
   mats: []
@@ -1095,10 +1095,12 @@ MonoBehaviour:
   playerMesh: {fileID: 0}
   playerMats: []
   playerOut: []
-  isInvisible: 0
   canNotChangeHurt: 0
   soulPrefab: {fileID: 1723151111827507807, guid: e2b65aa482f2f1447a4074208d72b778, type: 3}
   soulStartSpeed: 1
+  isInvisible: 0
+  invisibleTime: 0
+  easyToGetHit: 0.2
   id: 0
   jumpSpeed: 10
   searchState: 0

+ 5 - 8
ActionTowerDefense/Assets/Resources/Prefab/Enemy_Giant.prefab

@@ -97,12 +97,8 @@ MonoBehaviour:
   force: {x: 0, y: 0, z: 0}
   changeHurt: 0
   repelValue: 0
-  spiritsAttackEffect: {fileID: 0}
   offsetY: 1
   hitRate: 1
-  Miss: {fileID: 6380148097413123628, guid: b0832b9907489bd44a617b760ccfd8c8, type: 3}
-  criticalRandom: 0
-  isRandom: 0
 --- !u!1 &2460330936527559963
 GameObject:
   m_ObjectHideFlags: 0
@@ -367,7 +363,7 @@ BoxCollider:
   m_IsTrigger: 1
   m_Enabled: 1
   serializedVersion: 2
-  m_Size: {x: 1, y: 0.003, z: 20}
+  m_Size: {x: 1.76, y: 0.003, z: 20}
   m_Center: {x: 0, y: 0, z: 0}
 --- !u!114 &5440846222604650418
 MonoBehaviour:
@@ -432,6 +428,7 @@ MonoBehaviour:
   m_EditorClassIdentifier: 
   isTran: 0
   pc: {fileID: 0}
+  isSpirit: 0
   HitCols:
   - {fileID: 4480734502875862885}
   - {fileID: 2460330936527559963}
@@ -491,8 +488,6 @@ MonoBehaviour:
   attackToFloat: 0
   floatTimes: 0
   hasFloatTimes: 0
-  isSoulUnstable: 0
-  soulUnstableTime: 0
   criticalChance: 0
   criticalMultiplier: 0
   canMove: 1
@@ -526,6 +521,7 @@ MonoBehaviour:
   rapidFallSpeed: 30
   curFallSpeed: 0
   floatState: 0
+  matState: 1
   spinee: {fileID: 0}
   mesh: {fileID: 0}
   mats: []
@@ -545,10 +541,11 @@ MonoBehaviour:
   playerMesh: {fileID: 0}
   playerMats: []
   playerOut: []
-  isInvisible: 0
   canNotChangeHurt: 0
   soulPrefab: {fileID: 1723151111827507807, guid: e2b65aa482f2f1447a4074208d72b778, type: 3}
   soulStartSpeed: 1
+  isInvisible: 0
+  invisibleTime: 0
   easyToGetHit: 0.2
   id: 0
   jumpSpeed: 10

+ 6 - 1
ActionTowerDefense/Assets/Resources/Prefab/MySpirit/Spirits_Invisible.prefab

@@ -197,7 +197,10 @@ MonoBehaviour:
   followNumber: 5
   haveSoulNumber: 0
   followEffect: {fileID: 4610496197409361392}
-  backSoulX: 10
+  backSoulX: 5
+  stayTime: 30
+  time: 0
+  getSoulDistance: 15
 --- !u!114 &2437299196472462353
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -1095,6 +1098,8 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 93b437b250872de40ae6544c67e67b5b, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
+  upSpeed: 0
+  notFind: 0
   angle: 0
   soulsNumber: 0
   rotateSpeed: 90

+ 103 - 5
ActionTowerDefense/Assets/Scenes/SampleScene.unity

@@ -141,7 +141,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 1
+  m_IsActive: 0
 --- !u!4 &43346113
 Transform:
   m_ObjectHideFlags: 0
@@ -5673,6 +5673,7 @@ Transform:
   - {fileID: 1500161235}
   - {fileID: 43346113}
   - {fileID: 2045679345}
+  - {fileID: 1497593546}
   m_Father: {fileID: 0}
   m_RootOrder: 1
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -16391,6 +16392,103 @@ CanvasRenderer:
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 1471408787}
   m_CullTransparentMesh: 1
+--- !u!1 &1497593545
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1497593546}
+  - component: {fileID: 1497593549}
+  - component: {fileID: 1497593548}
+  - component: {fileID: 1497593547}
+  m_Layer: 3
+  m_Name: Cube (5)
+  m_TagString: Plane
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &1497593546
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1497593545}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 21.15, y: 6, z: 0}
+  m_LocalScale: {x: 10, y: 0.1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 585662581}
+  m_RootOrder: 3
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!65 &1497593547
+BoxCollider:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1497593545}
+  m_Material: {fileID: 0}
+  m_IsTrigger: 0
+  m_Enabled: 1
+  serializedVersion: 2
+  m_Size: {x: 1, y: 1, z: 20}
+  m_Center: {x: 0, y: 0, z: 0}
+--- !u!23 &1497593548
+MeshRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1497593545}
+  m_Enabled: 1
+  m_CastShadows: 1
+  m_ReceiveShadows: 1
+  m_DynamicOccludee: 1
+  m_StaticShadowCaster: 0
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RayTracingMode: 2
+  m_RayTraceProcedural: 0
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_ReceiveGI: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 1
+  m_SelectedEditorRenderState: 3
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: 0
+  m_SortingLayer: 0
+  m_SortingOrder: 0
+  m_AdditionalVertexStreams: {fileID: 0}
+--- !u!33 &1497593549
+MeshFilter:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1497593545}
+  m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
 --- !u!1 &1500161231
 GameObject:
   m_ObjectHideFlags: 0
@@ -26342,8 +26440,8 @@ Transform:
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 2045679344}
   m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
-  m_LocalPosition: {x: -84.6, y: 1, z: 0.5}
-  m_LocalScale: {x: 15, y: 4, z: 1}
+  m_LocalPosition: {x: 77, y: 12, z: 0}
+  m_LocalScale: {x: 100, y: 0.1, z: 1}
   m_ConstrainProportionsScale: 0
   m_Children: []
   m_Father: {fileID: 585662581}
@@ -26360,8 +26458,8 @@ BoxCollider:
   m_IsTrigger: 0
   m_Enabled: 1
   serializedVersion: 2
-  m_Size: {x: 1, y: 1, z: 1}
-  m_Center: {x: 0, y: 0, z: -1}
+  m_Size: {x: 1, y: 1, z: 20}
+  m_Center: {x: 0, y: 0, z: 0}
 --- !u!23 &2045679347
 MeshRenderer:
   m_ObjectHideFlags: 0

+ 2 - 0
ActionTowerDefense/Assets/Scripts/Enemy.cs

@@ -799,6 +799,7 @@ public class Enemy : MoveCharacter
                 targetDir =
                         (rushEndPos - transform.position).normalized;
                 ani.Play("rush_attack", 0, 0);
+                aniCollider.Play("Attack1", 0, 0);
                 break;
             case CharacterState.ReadyToDownRush:
                 time = 0;
@@ -809,6 +810,7 @@ public class Enemy : MoveCharacter
                 time = 0;
                 targetDir = Vector3.down;
                 ani.Play("rush_attack", 0, 0);
+                aniCollider.Play("Attack1", 0, 0);
                 break;
             case CharacterState.FinishRush:
                 time = 0;

+ 2 - 0
ActionTowerDefense/Assets/Scripts/EnemyTower.cs

@@ -6,6 +6,7 @@ public class EnemyTower : Character
 {
     private void Awake()
     {
+        TowerMap.enemyTowers.Add(gameObject);
         Init();
     }
 
@@ -102,6 +103,7 @@ public class EnemyTower : Character
                 aniCollider.Play("Die", 0, 0);
                 isDie = true;
                 dieKeepTime = totalDieKeepTime;
+                TowerMap.myTowers.Remove(gameObject);
                 break;
             default:
                 break;

+ 7 - 6
ActionTowerDefense/Assets/Scripts/Spirits/ESpirits_Invisible.cs

@@ -81,7 +81,7 @@ public class ESpirits_Invisible : MonoBehaviour
                 posx = PlayersInput.instance[nowPlayer].transform.position.x;
                 targetPos = new Vector3(posx + offsetX, altitude + offsetY, transform.position.z);
                 Goto(targetPos, moveSpeed);
-                if (Vector3.Distance(targetPos, transform.position) < 0.5f)
+                if (Vector3.Distance(targetPos, transform.position) < 1)
                 {
                     offsetY = Random.Range(-randomRageY, randomRageY);
                     offsetX = Random.Range(-randomRageX, randomRageX);
@@ -100,7 +100,7 @@ public class ESpirits_Invisible : MonoBehaviour
                     ChangeState(InvisibleState.FindSoul);
                     return;
                 }
-                if (Vector3.Distance(targetPos, transform.position) < 0.5f)
+                if (Vector3.Distance(targetPos, transform.position) < 1)
                 {
                     ChangeState(InvisibleState.Normal);
                     return;
@@ -114,7 +114,7 @@ public class ESpirits_Invisible : MonoBehaviour
                     pos1 = new Vector3(transform.position.x, transform.position.y, 0);
                     pos2 = new Vector3(targetSoul.transform.position.x,
                         targetSoul.transform.position.y, 0);
-                    if(Vector3.Distance(pos1, pos2) <= 0.5f)
+                    if(Vector3.Distance(pos1, pos2) <= 1)
                     {
                         SoulInMap.souls.Remove(targetSoul);
                         targetSoul.gameObject.SetActive(false);
@@ -150,14 +150,14 @@ public class ESpirits_Invisible : MonoBehaviour
                 }
                 pos1 = new Vector3(transform.position.x, transform.position.y, 0);
                 pos2 = new Vector3(enemy.targetCharacter.transform.position.x,
-                    enemy.targetCharacter.transform.position.y + 0.5f, 0);
-                if (Vector3.Distance(pos1,pos2)<= 0.5f)
+                    enemy.targetCharacter.transform.position.y + 1, 0);
+                if (Vector3.Distance(pos1,pos2)<= 1)
                 {
                     ChangeState(InvisibleState.Boom);
                     break;
                 }
                 boomSpeed += Time.deltaTime * upSpeed;
-                Goto(enemy.targetCharacter.transform.position + Vector3.up*0.5f, boomSpeed);
+                Goto(enemy.targetCharacter.transform.position + Vector3.up, boomSpeed);
                 break;
             case InvisibleState.Boom:
                 ChangeState(InvisibleState.Normal);
@@ -213,6 +213,7 @@ public class ESpirits_Invisible : MonoBehaviour
                 enemy.isDie = true;
                 enemy.dieKeepTime = enemy.totalDieKeepTime;
                 enemy.DropSouls();
+                followEffect.DropSoul(haveSoulNumber, false);
                 gameObject.SetActive(false);
                 break;
             default:

+ 9 - 3
ActionTowerDefense/Assets/Scripts/Spirits/SoulFollowEffect.cs

@@ -4,6 +4,8 @@ using UnityEngine;
 
 public class SoulFollowEffect : MonoBehaviour
 {
+    public float upSpeed;
+    public bool notFind;
     [HideInInspector]
     public float angle;
     public int soulsNumber;
@@ -76,7 +78,7 @@ public class SoulFollowEffect : MonoBehaviour
 
 
     }
-    public void DropSoul(int souNumber) 
+    public void DropSoul(int souNumber,bool changeUpSpeed = true) 
     {
         float angle = 360f / souNumber;
         for (int i = 0; i < souNumber; i++)
@@ -87,10 +89,14 @@ public class SoulFollowEffect : MonoBehaviour
             soulObj.transform.position = transform.position + 
                 new Vector3(distance * Mathf.Cos(targetRad), distance * Mathf.Sin(targetRad), 0);
             Soul soulScript = soulObj.GetComponent<Soul>();
-            soulScript.Spirits_Invisible_NotFind = true;
-            soulScript.upSpeed = 0;
+            if (changeUpSpeed)
+            {
+                soulScript.Spirits_Invisible_NotFind = notFind;
+                soulScript.upSpeed = upSpeed;
+            }
             soulScript.Burst(Vector3.zero);
 
+
         }
 
         

+ 44 - 31
ActionTowerDefense/Assets/Scripts/Spirits/Spirits_Invisible.cs

@@ -24,8 +24,6 @@ public class Spirits_Invisible : MonoBehaviour
     public Vector3 targetPos;
     public float back;
     [HideInInspector]
-    public int hp;
-    [HideInInspector]
     public float posx;
     [HideInInspector]
     public Soul targetSoul;
@@ -34,6 +32,10 @@ public class Spirits_Invisible : MonoBehaviour
     public int haveSoulNumber;
     public SoulFollowEffect followEffect;
     public float backSoulX;
+    public float stayTime;
+    [HideInInspector]
+    public float time;
+    public float getSoulDistance;
     // Start is called before the first frame update
     void Start()
     {
@@ -42,16 +44,17 @@ public class Spirits_Invisible : MonoBehaviour
             gameObject.SetActive(false);
         }
         demonic.isNonAttack = true;
-        hp = demonic.hp;
     }
 
     // Update is called once per frame
     void Update()
     {
         Onstate();
-        if (demonic.hp <= 0)
+        time += Time.deltaTime;
+        if (time >= stayTime)
         {
-            ChangeState(InvisibleState.Die);
+            followEffect.DropSoul(haveSoulNumber,false);
+            gameObject.SetActive(false);
         }
     }
     void Onstate()
@@ -64,18 +67,18 @@ public class Spirits_Invisible : MonoBehaviour
 
                 if (haveSoulNumber != followNumber && SoulInMap.souls.Count != 0)
                 {
-                    ChangeState(InvisibleState.FindSoul);
-                    return;
-                }
-                if (hp != demonic.hp)
-                {
-                    ChangeState(InvisibleState.Hurt);
-                    return;
+                    FindSoul();
+                    if(targetSoul != null)
+                    {
+                        ChangeState(InvisibleState.FindSoul);
+                        return;
+                    }
+                   
                 }
                 posx = PlayersInput.instance[demonic.playerID].transform.position.x;
                 targetPos = new Vector3(posx + offsetX, altitude + offsetY, transform.position.z);
                 Goto(targetPos, moveSpeed);
-                if (Vector3.Distance(targetPos, transform.position) < 0.5f)
+                if (Vector3.Distance(targetPos, transform.position) < 1)
                 {
                     offsetY = Random.Range(-randomRageY, randomRageY);
                     offsetX = Random.Range(-randomRageX, randomRageX);
@@ -88,7 +91,7 @@ public class Spirits_Invisible : MonoBehaviour
                     ChangeState(InvisibleState.FindSoul);
                     return;
                 }
-                if (Vector3.Distance(targetPos, transform.position) < 0.5f)
+                if (Vector3.Distance(targetPos, transform.position) < 1)
                 {
                     ChangeState(InvisibleState.Normal);
                     return;
@@ -116,7 +119,7 @@ public class Spirits_Invisible : MonoBehaviour
                     pos1 = new Vector3(transform.position.x, transform.position.y, 0);
                     pos2 = new Vector3(targetSoul.transform.position.x,
                         targetSoul.transform.position.y, 0);
-                    if (Vector3.Distance(pos1, pos2) <= 0.5f)
+                    if (Vector3.Distance(pos1, pos2) <= 1)
                     {
                         SoulInMap.souls.Remove(targetSoul);
                         targetSoul.gameObject.SetActive(false);
@@ -145,15 +148,13 @@ public class Spirits_Invisible : MonoBehaviour
                 break;
             case InvisibleState.FindPlayer:
                 pos1 = new Vector3(transform.position.x, transform.position.y, 0);
-                pos2 = new Vector3(PlayersInput.instance[demonic.playerID].transform.position.x + backSoulX,
-                    PlayersInput.instance[demonic.playerID].transform.position.y + 1, 0);
-                if (Vector3.Distance(pos1, pos2) <= 0.5f)
+                if (Vector3.Distance(pos1, targetPos) <= 1)
                 {
                     ChangeState(InvisibleState.Boom);
                     break;
                 }
                 boomSpeed += Time.deltaTime * upSpeed;
-                Goto(pos2, boomSpeed);
+                Goto(targetPos, boomSpeed);
                 break;
             case InvisibleState.Boom:
                 ChangeState(InvisibleState.Normal);
@@ -182,7 +183,6 @@ public class Spirits_Invisible : MonoBehaviour
         switch (newState)
         {
             case InvisibleState.Normal:
-                hp = demonic.hp;
                 offsetY = Random.Range(-randomRageY, randomRageY);
                 offsetX = Random.Range(-randomRageX, randomRageX);
                 break;
@@ -195,7 +195,22 @@ public class Spirits_Invisible : MonoBehaviour
                 FindSoul();
                 break;
             case InvisibleState.FindPlayer:
+
                 boomSpeed = minSpeed;
+                PlayerController playerController = PlayersInput.instance[demonic.playerID];
+                if (playerController.transform.GetChild(0).localScale.x < 0)
+                {
+                    targetPos = 
+                        new Vector3(playerController.transform.position.x - backSoulX,
+                            playerController.transform.position.y + 1, 0);
+                }
+                else
+                {
+                    targetPos =
+                        new Vector3(playerController.transform.position.x + backSoulX,
+                            playerController.transform.position.y + 1, 0);
+                }
+                
                 break;
             case InvisibleState.Boom:
                 rb.velocity = Vector3.zero;
@@ -223,32 +238,30 @@ public class Spirits_Invisible : MonoBehaviour
     {
         Vector3 pos1;
         Vector3 pos2;
+        Vector3 pos3;
         List<Soul> souls = SoulInMap.souls;
         if (souls.Count == 0)
         {
             targetSoul = null;
             return;
         }
-        pos1 = new Vector3(souls[0].transform.position.x, souls[0].transform.position.y, 0);
-        pos2 = new Vector3(transform.position.x, transform.position.y, 0);
-        float minDistance = Vector3.Distance(pos1, pos2);
-        int targetSoulId = 0;
-        for (int i = 1; i < souls.Count; i++)
+        float minDistance = Mathf.Infinity;
+        int targetSoulId = -1;
+        for (int i = 0; i < souls.Count; i++)
         {
-            if (souls[i].Spirits_Invisible_NotFind)
-            {
-                continue;
-            }
             pos1 = new Vector3(souls[i].transform.position.x, souls[i].transform.position.y, 0);
             pos2 = new Vector3(transform.position.x, transform.position.y, 0);
+            pos3 = new Vector3(PlayersInput.instance[demonic.playerID].transform.position.x,
+                PlayersInput.instance[demonic.playerID].transform.position.y, 0);
             float distance = Vector3.Distance(pos1, pos2);
-            if (souls[targetSoulId].Spirits_Invisible_NotFind || distance < minDistance)
+            float distance1 = Vector3.Distance(pos1, pos3);
+            if (distance1 > getSoulDistance && distance<minDistance)
             {
                 minDistance = distance;
                 targetSoulId = i;
             }
         }
-        if (souls[targetSoulId].Spirits_Invisible_NotFind)
+        if (targetSoulId == -1)
         {
             targetSoul = null;
             return;

+ 91 - 83
ActionTowerDefense/Assets/Scripts/Spirits/Trans_Assassin.cs

@@ -1,14 +1,24 @@
 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
+using UnityEngine.InputSystem;
+public enum Trans_AssassinState
+{
+    None = -1,
+    Normal = 0,         //正常状态
+    ReadyToRush = 1,    //准备冲刺状态
+    Rush = 2,           //冲刺状态
+    HaveRush = 3,       //已冲刺一次状态
+    ReadyToSecondRush = 4,  //第二次准备冲刺状态
+    SecondRush = 5,     //第二次冲刺
+}
 
 public class Trans_Assassin : MonoBehaviour
 {
+
     public PlayerController player;
     public float criticalChance;            //暴击率
     public float criticalMultiplier;        //暴击倍数
-    public bool isUltimate;
-    public bool isNextUltimate;
     [HideInInspector]
     public float distance;
     public float rushSpeed;
@@ -20,6 +30,7 @@ public class Trans_Assassin : MonoBehaviour
     [HideInInspector]
     public float time;
     public float nextRushTime;
+    public Trans_AssassinState state;
 
     // Start is called before the first frame update
     void Start()
@@ -30,52 +41,15 @@ public class Trans_Assassin : MonoBehaviour
         player.criticalMultiplier = criticalMultiplier;
         distance = rushSpeed * rushTime/2;
     }
-
     // Update is called once per frame
     void Update()
     {
-        if (isNextUltimate)
+        switch (state)
         {
-
-            if (isUltimate)
-            {
-
-                if (player.isUltimate)
-                {
-                    ReadyToDash(player.moveVec);
-                }
-                else
-                {
-                    dashEffect.canHit = true;
-                    aimEffect.SetActive(false);
-                    player.ani.Play("attack_summon", 0, 0);
-                    Rush();
-                    time += Time.deltaTime;
-                    if (time >= rushTime)
-                    {
-                        //isNextUltimate = true;
-                        //isUltimate = false;
-                        
-                        player.canMove = true;
-                        player.canfly = false;
-                        dashEffect.canHit = false;
-                        player.bodyTrans.rotation = Quaternion.Euler(Vector3.zero);
-                        player.ChangeState(CharacterState.Fall);
-                        time = 0;
-                        player.EndTransfiguration(4);
-                    }
-                }
-            }
-            else
-            {
-                time += Time.deltaTime;
-                if (time >= nextRushTime)
-                {
-                    player.EndTransfiguration(4);
-                }
+            case Trans_AssassinState.Normal:
                 if (player.isUltimate)
                 {
-                    time = 0;
+                    player.isUltimate = false;
                     player.moveVec = player.leftDir;
                     player.canMove = false;
                     player.ChangeState(CharacterState.None);
@@ -90,44 +64,47 @@ public class Trans_Assassin : MonoBehaviour
                     aimEffect.SetActive(true);
                     aimEffect.transform.localScale =
                         new Vector3(distance, 3, 1);
-                    isUltimate = true;
+                    state = Trans_AssassinState.ReadyToRush;
 
                 }
-            }
-        }
-        else
-        {
-            if (isUltimate)
-            {
-
-                if (player.isUltimate)
+                break;
+            case Trans_AssassinState.ReadyToRush:
+                ReadyToDash(player.moveVec);
+                if (player.keyTransfigurateRelease)
                 {
-                    ReadyToDash(player.moveVec);
+                    player.keyTransfigurateRelease = false;
+                    state = Trans_AssassinState.Rush;
+                    time = 0;
                 }
-                else
+                break;
+            case Trans_AssassinState.Rush:
+                dashEffect.canHit = true;
+                aimEffect.SetActive(false);
+                player.ani.Play("attack_summon", 0, 0);
+                Rush();
+                time += Time.deltaTime;
+                if (time >= rushTime)
                 {
-                    dashEffect.canHit = true;
-                    aimEffect.SetActive(false);
-                    player.ani.Play("attack_summon", 0, 0);
-                    Rush();
-                    time += Time.deltaTime;
-                    if (time >= rushTime)
-                    {
-                        isNextUltimate = true;
-                        isUltimate = false;
-                        player.canMove = true;
-                        player.canfly = false;
-                        dashEffect.canHit = false;
-                        player.bodyTrans.rotation = Quaternion.Euler(Vector3.zero);
-                        player.ChangeState(CharacterState.Fall);
-                        time = 0;
-                    }
+                    player.canMove = true;
+                    player.canfly = false;
+                    dashEffect.canHit = false;
+                    player.bodyTrans.rotation = Quaternion.Euler(Vector3.zero);
+                    player.ChangeState(CharacterState.Fall);
+                    time = 0;
+                    state = Trans_AssassinState.HaveRush;
+                }
+                break;
+            case Trans_AssassinState.HaveRush:
+                time += Time.deltaTime;
+                if (time >= nextRushTime)
+                {
+                    player.EndTransfiguration(4);
+                    break;
                 }
-            }
-            else
-            {
                 if (player.isUltimate)
                 {
+                    player.isUltimate = false;
+                    time = 0;
                     player.moveVec = player.leftDir;
                     player.canMove = false;
                     player.ChangeState(CharacterState.None);
@@ -135,17 +112,42 @@ public class Trans_Assassin : MonoBehaviour
                     player.canfly = true;
                     if (!player.foot.TrigGround)
                     {
-                        
+
                         player.rb.velocity = Vector3.zero;
                         player.rb.useGravity = false;
                     }
                     aimEffect.SetActive(true);
                     aimEffect.transform.localScale =
                         new Vector3(distance, 3, 1);
-                    isUltimate = true;
-                    
+                    state = Trans_AssassinState.ReadyToSecondRush;
                 }
-            }
+                break;
+            case Trans_AssassinState.ReadyToSecondRush:
+                ReadyToDash(player.moveVec);
+                if (player.keyTransfigurateRelease)
+                {
+                    player.keyTransfigurateRelease = false;
+                    state = Trans_AssassinState.SecondRush;
+                    time = 0;
+                }
+                break;
+            case Trans_AssassinState.SecondRush:
+                dashEffect.canHit = true;
+                aimEffect.SetActive(false);
+                player.ani.Play("attack_summon", 0, 0);
+                Rush();
+                time += Time.deltaTime;
+                if (time >= rushTime)
+                {
+                    player.canMove = true;
+                    player.canfly = false;
+                    dashEffect.canHit = false;
+                    player.bodyTrans.rotation = Quaternion.Euler(Vector3.zero);
+                    player.ChangeState(CharacterState.Fall);
+                    time = 0;
+                    player.EndTransfiguration(4);
+                }
+                break;
         }
 
     }
@@ -154,21 +156,27 @@ public class Trans_Assassin : MonoBehaviour
     {
         player.criticalChance = 0;
         player.jumpNumber = 2;
+        player.bodyTrans.transform.localScale = transform.GetChild(0).localScale;
     }
     public void ReadyToDash(Vector2 leftDir)
     {
         if(leftDir == Vector2.zero)
         {
-            if (player.transform.localScale.x > 0)
-            {
-                targetDir = Vector3.right;
-            }
-            else
+            if (targetDir == Vector3.zero)
             {
-                targetDir = Vector3.left;
-                
+                if (transform.GetChild(0).localScale.x < 0)
+                {
+                    targetDir = Vector3.right;
+                }
+                else
+                {
+                    targetDir = Vector3.left;
+
+                }
+
             }
 
+
         }
         else
         {

+ 3 - 18
ActionTowerDefense/Assets/Scripts/Tower.cs

@@ -5,18 +5,10 @@ using static Spine.Unity.Examples.SpineboyFootplanter;
 
 public class Tower : Character
 {
-    public bool isMy;
     private void Awake()
     {
-        if (isMy)
-        {
-            TowerMap.myTowers.Add(gameObject);
-        }
-        else
-        {
-            TowerMap.enemyTowers.Add(gameObject);
-        }
-        
+        TowerMap.myTowers.Add(gameObject);
+
         Init();
         
     }
@@ -114,14 +106,7 @@ public class Tower : Character
                 aniCollider.Play("Die", 0, 0);
                 isDie = true;
                 dieKeepTime = totalDieKeepTime;
-                if (isMy)
-                {
-                    TowerMap.myTowers.Remove(gameObject);
-                }
-                else
-                {
-                    TowerMap.enemyTowers.Remove(gameObject);
-                }
+                TowerMap.myTowers.Remove(gameObject);
                 break;
             default:
                 break;