Explorar el Código

使魔远程攻击功能

wulifu hace 1 año
padre
commit
d3dbadb0a8

+ 9 - 9
ActionTowerDefense/Assets/Animations/Demonic_Arrow/DemonicArrowCollider.controller

@@ -20,7 +20,7 @@ AnimatorState:
   m_MirrorParameterActive: 0
   m_CycleOffsetParameterActive: 0
   m_TimeParameterActive: 0
-  m_Motion: {fileID: 7400000, guid: 63c9cd2f3ecfdf54da8118dc0b8e5d4f, type: 2}
+  m_Motion: {fileID: 7400000, guid: fde01236efd4aa94496d0224019ffd7c, type: 2}
   m_Tag: 
   m_SpeedParameter: 
   m_MirrorParameter: 
@@ -46,7 +46,7 @@ AnimatorState:
   m_MirrorParameterActive: 0
   m_CycleOffsetParameterActive: 0
   m_TimeParameterActive: 0
-  m_Motion: {fileID: 7400000, guid: f3b45489041fa73408bfacdaf6ea95ae, type: 2}
+  m_Motion: {fileID: 7400000, guid: 6623e5ceaf5db7746867bbd85fcba27d, type: 2}
   m_Tag: 
   m_SpeedParameter: 
   m_MirrorParameter: 
@@ -109,7 +109,7 @@ AnimatorState:
   m_MirrorParameterActive: 0
   m_CycleOffsetParameterActive: 0
   m_TimeParameterActive: 0
-  m_Motion: {fileID: 7400000, guid: 75d437ef61cfe8247ab8f3d3d5c82890, type: 2}
+  m_Motion: {fileID: 7400000, guid: 86ca53e1b65baa44a9872beb291b8434, type: 2}
   m_Tag: 
   m_SpeedParameter: 
   m_MirrorParameter: 
@@ -135,7 +135,7 @@ AnimatorState:
   m_MirrorParameterActive: 0
   m_CycleOffsetParameterActive: 0
   m_TimeParameterActive: 0
-  m_Motion: {fileID: 7400000, guid: 64e00a3e599a52247b87be84772b2eeb, type: 2}
+  m_Motion: {fileID: 7400000, guid: 278e9f447e499b44ab5396c1c52d0594, type: 2}
   m_Tag: 
   m_SpeedParameter: 
   m_MirrorParameter: 
@@ -161,7 +161,7 @@ AnimatorState:
   m_MirrorParameterActive: 0
   m_CycleOffsetParameterActive: 0
   m_TimeParameterActive: 0
-  m_Motion: {fileID: 7400000, guid: eee422959082fee47a83308ac418517e, type: 2}
+  m_Motion: {fileID: 7400000, guid: 05178e4c83d99834ca3e7b50ac07dc65, type: 2}
   m_Tag: 
   m_SpeedParameter: 
   m_MirrorParameter: 
@@ -249,7 +249,7 @@ AnimatorState:
   m_MirrorParameterActive: 0
   m_CycleOffsetParameterActive: 0
   m_TimeParameterActive: 0
-  m_Motion: {fileID: 7400000, guid: a23f46caa2f7293488b3b44249973827, type: 2}
+  m_Motion: {fileID: 7400000, guid: b6de3da425baee249a9cbc9777d5718f, type: 2}
   m_Tag: 
   m_SpeedParameter: 
   m_MirrorParameter: 
@@ -275,7 +275,7 @@ AnimatorState:
   m_MirrorParameterActive: 0
   m_CycleOffsetParameterActive: 0
   m_TimeParameterActive: 0
-  m_Motion: {fileID: 7400000, guid: 62476bc1a53e6d04c8a1ba9e0417884e, type: 2}
+  m_Motion: {fileID: 7400000, guid: 8502bc5b59610b74591776b57780907e, type: 2}
   m_Tag: 
   m_SpeedParameter: 
   m_MirrorParameter: 
@@ -301,7 +301,7 @@ AnimatorState:
   m_MirrorParameterActive: 0
   m_CycleOffsetParameterActive: 0
   m_TimeParameterActive: 0
-  m_Motion: {fileID: 7400000, guid: 069355423a61a43458e35e507840659d, type: 2}
+  m_Motion: {fileID: 7400000, guid: 9334a94d8dd2a624fa82ad5e1ee6b8d7, type: 2}
   m_Tag: 
   m_SpeedParameter: 
   m_MirrorParameter: 
@@ -327,7 +327,7 @@ AnimatorState:
   m_MirrorParameterActive: 0
   m_CycleOffsetParameterActive: 0
   m_TimeParameterActive: 0
-  m_Motion: {fileID: 7400000, guid: 30a95a87753abf94a92e4dd263c84231, type: 2}
+  m_Motion: {fileID: 7400000, guid: bf1bfa3373725f64d919673d5f222ec8, type: 2}
   m_Tag: 
   m_SpeedParameter: 
   m_MirrorParameter: 

+ 221 - 59
ActionTowerDefense/Assets/Animations/Demonic_Arrow/DemonicArrowCollider_Attack1.anim

@@ -14,55 +14,57 @@ AnimationClip:
   m_RotationCurves: []
   m_CompressedRotationCurves: []
   m_EulerCurves: []
-  m_PositionCurves: []
-  m_ScaleCurves: []
-  m_FloatCurves:
+  m_PositionCurves:
   - curve:
       serializedVersion: 2
       m_Curve:
       - serializedVersion: 3
         time: 0
-        value: 0
-        inSlope: Infinity
-        outSlope: Infinity
-        tangentMode: 103
-        weightedMode: 0
-        inWeight: 0
-        outWeight: 0
-      - serializedVersion: 3
-        time: 0.5
-        value: 1
-        inSlope: Infinity
-        outSlope: Infinity
-        tangentMode: 103
+        value: {x: -0.5, y: 1, z: 0}
+        inSlope: {x: 0, y: 0, z: 0}
+        outSlope: {x: 0, y: 0, z: 0}
+        tangentMode: 0
         weightedMode: 0
-        inWeight: 0
-        outWeight: 0
+        inWeight: {x: 0, y: 0.33333334, z: 0.33333334}
+        outWeight: {x: 0, y: 0.33333334, z: 0.33333334}
+      m_PreInfinity: 2
+      m_PostInfinity: 2
+      m_RotationOrder: 4
+    path: ShootPos3
+  - curve:
+      serializedVersion: 2
+      m_Curve:
       - serializedVersion: 3
-        time: 0.6666667
-        value: 1
-        inSlope: Infinity
-        outSlope: Infinity
-        tangentMode: 103
+        time: 0
+        value: {x: -0.5, y: 1, z: 0}
+        inSlope: {x: 0, y: 0, z: 0}
+        outSlope: {x: 0, y: 0, z: 0}
+        tangentMode: 0
         weightedMode: 0
-        inWeight: 0
-        outWeight: 0
+        inWeight: {x: 0, y: 0.33333334, z: 0.33333334}
+        outWeight: {x: 0, y: 0.33333334, z: 0.33333334}
+      m_PreInfinity: 2
+      m_PostInfinity: 2
+      m_RotationOrder: 4
+    path: ShootPos2
+  - curve:
+      serializedVersion: 2
+      m_Curve:
       - serializedVersion: 3
-        time: 1
-        value: 0
-        inSlope: Infinity
-        outSlope: Infinity
-        tangentMode: 103
+        time: 0
+        value: {x: -0.5, y: 1, z: 0}
+        inSlope: {x: 0, y: 0, z: 0}
+        outSlope: {x: 0, y: 0, z: 0}
+        tangentMode: 0
         weightedMode: 0
-        inWeight: 0
-        outWeight: 0
+        inWeight: {x: 0, y: 0.33333334, z: 0.33333334}
+        outWeight: {x: 0, y: 0.33333334, z: 0.33333334}
       m_PreInfinity: 2
       m_PostInfinity: 2
       m_RotationOrder: 4
-    attribute: m_IsActive
-    path: AttackTrigger
-    classID: 1
-    script: {fileID: 0}
+    path: ShootPos
+  m_ScaleCurves: []
+  m_FloatCurves: []
   m_PPtrCurves: []
   m_SampleRate: 60
   m_WrapMode: 0
@@ -72,10 +74,24 @@ AnimationClip:
   m_ClipBindingConstant:
     genericBindings:
     - serializedVersion: 2
-      path: 2552762923
-      attribute: 2086281974
+      path: 361946371
+      attribute: 1
       script: {fileID: 0}
-      typeID: 1
+      typeID: 4
+      customType: 0
+      isPPtrCurve: 0
+    - serializedVersion: 2
+      path: 1653992853
+      attribute: 1
+      script: {fileID: 0}
+      typeID: 4
+      customType: 0
+      isPPtrCurve: 0
+    - serializedVersion: 2
+      path: 1201289800
+      attribute: 1
+      script: {fileID: 0}
+      typeID: 4
       customType: 0
       isPPtrCurve: 0
     pptrCurveMapping: []
@@ -84,7 +100,7 @@ AnimationClip:
     m_AdditiveReferencePoseClip: {fileID: 0}
     m_AdditiveReferencePoseTime: 0
     m_StartTime: 0
-    m_StopTime: 1
+    m_StopTime: 0.5833333
     m_OrientationOffsetY: 0
     m_Level: 0
     m_CycleOffset: 0
@@ -100,53 +116,199 @@ AnimationClip:
     m_HeightFromFeet: 0
     m_Mirror: 0
   m_EditorCurves:
+  - curve:
+      serializedVersion: 2
+      m_Curve:
+      - serializedVersion: 3
+        time: 0
+        value: -0.5
+        inSlope: 0
+        outSlope: 0
+        tangentMode: 136
+        weightedMode: 0
+        inWeight: 0
+        outWeight: 0
+      m_PreInfinity: 2
+      m_PostInfinity: 2
+      m_RotationOrder: 4
+    attribute: m_LocalPosition.x
+    path: ShootPos3
+    classID: 4
+    script: {fileID: 0}
+  - curve:
+      serializedVersion: 2
+      m_Curve:
+      - serializedVersion: 3
+        time: 0
+        value: 1
+        inSlope: 0
+        outSlope: 0
+        tangentMode: 136
+        weightedMode: 0
+        inWeight: 0
+        outWeight: 0
+      m_PreInfinity: 2
+      m_PostInfinity: 2
+      m_RotationOrder: 4
+    attribute: m_LocalPosition.y
+    path: ShootPos3
+    classID: 4
+    script: {fileID: 0}
   - curve:
       serializedVersion: 2
       m_Curve:
       - serializedVersion: 3
         time: 0
         value: 0
-        inSlope: Infinity
-        outSlope: Infinity
-        tangentMode: 103
+        inSlope: 0
+        outSlope: 0
+        tangentMode: 136
         weightedMode: 0
         inWeight: 0
         outWeight: 0
+      m_PreInfinity: 2
+      m_PostInfinity: 2
+      m_RotationOrder: 4
+    attribute: m_LocalPosition.z
+    path: ShootPos3
+    classID: 4
+    script: {fileID: 0}
+  - curve:
+      serializedVersion: 2
+      m_Curve:
       - serializedVersion: 3
-        time: 0.5
+        time: 0
+        value: -0.5
+        inSlope: 0
+        outSlope: 0
+        tangentMode: 136
+        weightedMode: 0
+        inWeight: 0
+        outWeight: 0
+      m_PreInfinity: 2
+      m_PostInfinity: 2
+      m_RotationOrder: 4
+    attribute: m_LocalPosition.x
+    path: ShootPos2
+    classID: 4
+    script: {fileID: 0}
+  - curve:
+      serializedVersion: 2
+      m_Curve:
+      - serializedVersion: 3
+        time: 0
         value: 1
-        inSlope: Infinity
-        outSlope: Infinity
-        tangentMode: 103
+        inSlope: 0
+        outSlope: 0
+        tangentMode: 136
+        weightedMode: 0
+        inWeight: 0
+        outWeight: 0
+      m_PreInfinity: 2
+      m_PostInfinity: 2
+      m_RotationOrder: 4
+    attribute: m_LocalPosition.y
+    path: ShootPos2
+    classID: 4
+    script: {fileID: 0}
+  - curve:
+      serializedVersion: 2
+      m_Curve:
+      - serializedVersion: 3
+        time: 0
+        value: 0
+        inSlope: 0
+        outSlope: 0
+        tangentMode: 136
         weightedMode: 0
         inWeight: 0
         outWeight: 0
+      m_PreInfinity: 2
+      m_PostInfinity: 2
+      m_RotationOrder: 4
+    attribute: m_LocalPosition.z
+    path: ShootPos2
+    classID: 4
+    script: {fileID: 0}
+  - curve:
+      serializedVersion: 2
+      m_Curve:
       - serializedVersion: 3
-        time: 0.6666667
+        time: 0
+        value: -0.5
+        inSlope: 0
+        outSlope: 0
+        tangentMode: 136
+        weightedMode: 0
+        inWeight: 0
+        outWeight: 0
+      m_PreInfinity: 2
+      m_PostInfinity: 2
+      m_RotationOrder: 4
+    attribute: m_LocalPosition.x
+    path: ShootPos
+    classID: 4
+    script: {fileID: 0}
+  - curve:
+      serializedVersion: 2
+      m_Curve:
+      - serializedVersion: 3
+        time: 0
         value: 1
-        inSlope: Infinity
-        outSlope: Infinity
-        tangentMode: 103
+        inSlope: 0
+        outSlope: 0
+        tangentMode: 136
         weightedMode: 0
         inWeight: 0
         outWeight: 0
+      m_PreInfinity: 2
+      m_PostInfinity: 2
+      m_RotationOrder: 4
+    attribute: m_LocalPosition.y
+    path: ShootPos
+    classID: 4
+    script: {fileID: 0}
+  - curve:
+      serializedVersion: 2
+      m_Curve:
       - serializedVersion: 3
-        time: 1
+        time: 0
         value: 0
-        inSlope: Infinity
-        outSlope: Infinity
-        tangentMode: 103
+        inSlope: 0
+        outSlope: 0
+        tangentMode: 136
         weightedMode: 0
         inWeight: 0
         outWeight: 0
       m_PreInfinity: 2
       m_PostInfinity: 2
       m_RotationOrder: 4
-    attribute: m_IsActive
-    path: AttackTrigger
-    classID: 1
+    attribute: m_LocalPosition.z
+    path: ShootPos
+    classID: 4
     script: {fileID: 0}
   m_EulerEditorCurves: []
   m_HasGenericRootTransform: 0
   m_HasMotionFloatCurves: 0
-  m_Events: []
+  m_Events:
+  - time: 0.23333333
+    functionName: Attack1ShootEvent
+    data: 
+    objectReferenceParameter: {fileID: 0}
+    floatParameter: 0
+    intParameter: 0
+    messageOptions: 0
+  - time: 0.41666666
+    functionName: Attack1ShootEvent
+    data: 
+    objectReferenceParameter: {fileID: 0}
+    floatParameter: 0
+    intParameter: 1
+    messageOptions: 0
+  - time: 0.5833333
+    functionName: Attack1ShootEvent
+    data: 
+    objectReferenceParameter: {fileID: 0}
+    floatParameter: 0
+    intParameter: 2
+    messageOptions: 0

+ 57 - 69
ActionTowerDefense/Assets/Animations/Demonic_Arrow/DemonicArrowCollider_Attack2.anim

@@ -14,55 +14,25 @@ AnimationClip:
   m_RotationCurves: []
   m_CompressedRotationCurves: []
   m_EulerCurves: []
-  m_PositionCurves: []
-  m_ScaleCurves: []
-  m_FloatCurves:
+  m_PositionCurves:
   - curve:
       serializedVersion: 2
       m_Curve:
       - serializedVersion: 3
         time: 0
-        value: 0
-        inSlope: Infinity
-        outSlope: Infinity
-        tangentMode: 103
-        weightedMode: 0
-        inWeight: 0
-        outWeight: 0
-      - serializedVersion: 3
-        time: 0.5
-        value: 1
-        inSlope: Infinity
-        outSlope: Infinity
-        tangentMode: 103
-        weightedMode: 0
-        inWeight: 0
-        outWeight: 0
-      - serializedVersion: 3
-        time: 0.6666667
-        value: 1
-        inSlope: Infinity
-        outSlope: Infinity
-        tangentMode: 103
-        weightedMode: 0
-        inWeight: 0
-        outWeight: 0
-      - serializedVersion: 3
-        time: 1
-        value: 0
-        inSlope: Infinity
-        outSlope: Infinity
-        tangentMode: 103
+        value: {x: -0.5, y: 1, z: 0}
+        inSlope: {x: 0, y: 0, z: 0}
+        outSlope: {x: 0, y: 0, z: 0}
+        tangentMode: 0
         weightedMode: 0
-        inWeight: 0
-        outWeight: 0
+        inWeight: {x: 0, y: 0.33333334, z: 0.33333334}
+        outWeight: {x: 0, y: 0.33333334, z: 0.33333334}
       m_PreInfinity: 2
       m_PostInfinity: 2
       m_RotationOrder: 4
-    attribute: m_IsActive
-    path: AttackTrigger
-    classID: 1
-    script: {fileID: 0}
+    path: ShootPos
+  m_ScaleCurves: []
+  m_FloatCurves: []
   m_PPtrCurves: []
   m_SampleRate: 60
   m_WrapMode: 0
@@ -72,10 +42,10 @@ AnimationClip:
   m_ClipBindingConstant:
     genericBindings:
     - serializedVersion: 2
-      path: 2552762923
-      attribute: 2086281974
+      path: 1201289800
+      attribute: 1
       script: {fileID: 0}
-      typeID: 1
+      typeID: 4
       customType: 0
       isPPtrCurve: 0
     pptrCurveMapping: []
@@ -84,7 +54,7 @@ AnimationClip:
     m_AdditiveReferencePoseClip: {fileID: 0}
     m_AdditiveReferencePoseTime: 0
     m_StartTime: 0
-    m_StopTime: 1
+    m_StopTime: 0.33333334
     m_OrientationOffsetY: 0
     m_Level: 0
     m_CycleOffset: 0
@@ -105,48 +75,66 @@ AnimationClip:
       m_Curve:
       - serializedVersion: 3
         time: 0
-        value: 0
-        inSlope: Infinity
-        outSlope: Infinity
-        tangentMode: 103
-        weightedMode: 0
-        inWeight: 0
-        outWeight: 0
-      - serializedVersion: 3
-        time: 0.5
-        value: 1
-        inSlope: Infinity
-        outSlope: Infinity
-        tangentMode: 103
+        value: -0.5
+        inSlope: 0
+        outSlope: 0
+        tangentMode: 136
         weightedMode: 0
         inWeight: 0
         outWeight: 0
+      m_PreInfinity: 2
+      m_PostInfinity: 2
+      m_RotationOrder: 4
+    attribute: m_LocalPosition.x
+    path: ShootPos
+    classID: 4
+    script: {fileID: 0}
+  - curve:
+      serializedVersion: 2
+      m_Curve:
       - serializedVersion: 3
-        time: 0.6666667
+        time: 0
         value: 1
-        inSlope: Infinity
-        outSlope: Infinity
-        tangentMode: 103
+        inSlope: 0
+        outSlope: 0
+        tangentMode: 136
         weightedMode: 0
         inWeight: 0
         outWeight: 0
+      m_PreInfinity: 2
+      m_PostInfinity: 2
+      m_RotationOrder: 4
+    attribute: m_LocalPosition.y
+    path: ShootPos
+    classID: 4
+    script: {fileID: 0}
+  - curve:
+      serializedVersion: 2
+      m_Curve:
       - serializedVersion: 3
-        time: 1
+        time: 0
         value: 0
-        inSlope: Infinity
-        outSlope: Infinity
-        tangentMode: 103
+        inSlope: 0
+        outSlope: 0
+        tangentMode: 136
         weightedMode: 0
         inWeight: 0
         outWeight: 0
       m_PreInfinity: 2
       m_PostInfinity: 2
       m_RotationOrder: 4
-    attribute: m_IsActive
-    path: AttackTrigger
-    classID: 1
+    attribute: m_LocalPosition.z
+    path: ShootPos
+    classID: 4
     script: {fileID: 0}
   m_EulerEditorCurves: []
   m_HasGenericRootTransform: 0
   m_HasMotionFloatCurves: 0
-  m_Events: []
+  m_Events:
+  - time: 0.33333334
+    functionName: Attack2ShootEvent
+    data: 
+    objectReferenceParameter: {fileID: 0}
+    floatParameter: 0
+    intParameter: 0
+    messageOptions: 0

+ 9 - 9
ActionTowerDefense/Assets/Animations/Demonic_Giant/DemonicGiantCollider.controller

@@ -20,7 +20,7 @@ AnimatorState:
   m_MirrorParameterActive: 0
   m_CycleOffsetParameterActive: 0
   m_TimeParameterActive: 0
-  m_Motion: {fileID: 7400000, guid: 63c9cd2f3ecfdf54da8118dc0b8e5d4f, type: 2}
+  m_Motion: {fileID: 7400000, guid: eba68d2b6b9dfda4fa23f49888538ed8, type: 2}
   m_Tag: 
   m_SpeedParameter: 
   m_MirrorParameter: 
@@ -46,7 +46,7 @@ AnimatorState:
   m_MirrorParameterActive: 0
   m_CycleOffsetParameterActive: 0
   m_TimeParameterActive: 0
-  m_Motion: {fileID: 7400000, guid: f3b45489041fa73408bfacdaf6ea95ae, type: 2}
+  m_Motion: {fileID: 7400000, guid: 40b1c2219b2c8194fa8dec460ef6e42d, type: 2}
   m_Tag: 
   m_SpeedParameter: 
   m_MirrorParameter: 
@@ -109,7 +109,7 @@ AnimatorState:
   m_MirrorParameterActive: 0
   m_CycleOffsetParameterActive: 0
   m_TimeParameterActive: 0
-  m_Motion: {fileID: 7400000, guid: 75d437ef61cfe8247ab8f3d3d5c82890, type: 2}
+  m_Motion: {fileID: 7400000, guid: 00a20bad0daaf2d4fb2cbc132292aca1, type: 2}
   m_Tag: 
   m_SpeedParameter: 
   m_MirrorParameter: 
@@ -135,7 +135,7 @@ AnimatorState:
   m_MirrorParameterActive: 0
   m_CycleOffsetParameterActive: 0
   m_TimeParameterActive: 0
-  m_Motion: {fileID: 7400000, guid: 64e00a3e599a52247b87be84772b2eeb, type: 2}
+  m_Motion: {fileID: 7400000, guid: 29ad32e52ee5ec041b6a5c6c18bee30f, type: 2}
   m_Tag: 
   m_SpeedParameter: 
   m_MirrorParameter: 
@@ -161,7 +161,7 @@ AnimatorState:
   m_MirrorParameterActive: 0
   m_CycleOffsetParameterActive: 0
   m_TimeParameterActive: 0
-  m_Motion: {fileID: 7400000, guid: eee422959082fee47a83308ac418517e, type: 2}
+  m_Motion: {fileID: 7400000, guid: 28fd0947d37a5d244845ab19f0c5493a, type: 2}
   m_Tag: 
   m_SpeedParameter: 
   m_MirrorParameter: 
@@ -249,7 +249,7 @@ AnimatorState:
   m_MirrorParameterActive: 0
   m_CycleOffsetParameterActive: 0
   m_TimeParameterActive: 0
-  m_Motion: {fileID: 7400000, guid: a23f46caa2f7293488b3b44249973827, type: 2}
+  m_Motion: {fileID: 7400000, guid: 29e375f760ad97e44856d2084b1440a8, type: 2}
   m_Tag: 
   m_SpeedParameter: 
   m_MirrorParameter: 
@@ -275,7 +275,7 @@ AnimatorState:
   m_MirrorParameterActive: 0
   m_CycleOffsetParameterActive: 0
   m_TimeParameterActive: 0
-  m_Motion: {fileID: 7400000, guid: 62476bc1a53e6d04c8a1ba9e0417884e, type: 2}
+  m_Motion: {fileID: 7400000, guid: a9ca23493f6c89a43975b9f50c568be9, type: 2}
   m_Tag: 
   m_SpeedParameter: 
   m_MirrorParameter: 
@@ -301,7 +301,7 @@ AnimatorState:
   m_MirrorParameterActive: 0
   m_CycleOffsetParameterActive: 0
   m_TimeParameterActive: 0
-  m_Motion: {fileID: 7400000, guid: 069355423a61a43458e35e507840659d, type: 2}
+  m_Motion: {fileID: 7400000, guid: 57b94547e7edc374794ce9c482f007b6, type: 2}
   m_Tag: 
   m_SpeedParameter: 
   m_MirrorParameter: 
@@ -327,7 +327,7 @@ AnimatorState:
   m_MirrorParameterActive: 0
   m_CycleOffsetParameterActive: 0
   m_TimeParameterActive: 0
-  m_Motion: {fileID: 7400000, guid: 30a95a87753abf94a92e4dd263c84231, type: 2}
+  m_Motion: {fileID: 7400000, guid: 764ab08e94c653b4d9af742ffc3ea015, type: 2}
   m_Tag: 
   m_SpeedParameter: 
   m_MirrorParameter: 

+ 340 - 0
ActionTowerDefense/Assets/Resources/Prefab/Arrow.prefab

@@ -0,0 +1,340 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &7473170561697162160
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 7473170561697162167}
+  - component: {fileID: 7473170561697162166}
+  m_Layer: 0
+  m_Name: Arrow
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &7473170561697162167
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7473170561697162160}
+  m_LocalRotation: {x: 0, y: 0, z: 0.7071068, w: 0.7071068}
+  m_LocalPosition: {x: -0.3, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 7473170563405908937}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90}
+--- !u!212 &7473170561697162166
+SpriteRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7473170561697162160}
+  m_Enabled: 1
+  m_CastShadows: 0
+  m_ReceiveShadows: 0
+  m_DynamicOccludee: 1
+  m_StaticShadowCaster: 0
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RayTracingMode: 0
+  m_RayTraceProcedural: 0
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 10754, 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: 0
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: 0
+  m_SortingLayer: 0
+  m_SortingOrder: 0
+  m_Sprite: {fileID: 7482667652216324306, guid: 75f5f34dc1b5347e0b8351032682f224, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_FlipX: 0
+  m_FlipY: 0
+  m_DrawMode: 1
+  m_Size: {x: 0.2, y: 0.2}
+  m_AdaptiveModeThreshold: 0.5
+  m_SpriteTileMode: 0
+  m_WasSpriteAssigned: 1
+  m_MaskInteraction: 0
+  m_SpriteSortPoint: 0
+--- !u!1 &7473170562045770959
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 7473170562045770958}
+  - component: {fileID: 7473170562045770957}
+  m_Layer: 0
+  m_Name: Cube
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &7473170562045770958
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7473170562045770959}
+  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: 7473170563405908937}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!212 &7473170562045770957
+SpriteRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7473170562045770959}
+  m_Enabled: 1
+  m_CastShadows: 0
+  m_ReceiveShadows: 0
+  m_DynamicOccludee: 1
+  m_StaticShadowCaster: 0
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RayTracingMode: 0
+  m_RayTraceProcedural: 0
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 10754, 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: 0
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: 0
+  m_SortingLayer: 0
+  m_SortingOrder: 0
+  m_Sprite: {fileID: 21300000, guid: 97bdb0b0817469147954ce720ea6f795, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_FlipX: 0
+  m_FlipY: 0
+  m_DrawMode: 1
+  m_Size: {x: 0.6, y: 0.1}
+  m_AdaptiveModeThreshold: 0.5
+  m_SpriteTileMode: 0
+  m_WasSpriteAssigned: 1
+  m_MaskInteraction: 0
+  m_SpriteSortPoint: 0
+--- !u!1 &7473170563405908938
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 7473170563405908937}
+  - component: {fileID: 7414042625370929500}
+  - component: {fileID: 7485360237884938143}
+  - component: {fileID: 8541051486027365006}
+  m_Layer: 0
+  m_Name: Arrow
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &7473170563405908937
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7473170563405908938}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 1, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 7473170561697162167}
+  - {fileID: 7473170562045770958}
+  - {fileID: 7473170563757732085}
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!65 &7414042625370929500
+BoxCollider:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7473170563405908938}
+  m_Material: {fileID: 0}
+  m_IsTrigger: 1
+  m_Enabled: 1
+  serializedVersion: 2
+  m_Size: {x: 0.8, y: 0.2, z: 1}
+  m_Center: {x: 0, y: 0, z: 0}
+--- !u!114 &7485360237884938143
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7473170563405908938}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 9a4a2dbc1e482cd4b9f1532e1fddcb30, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  owner: {fileID: 0}
+  rb: {fileID: 0}
+  trigedObjs: []
+  damage: 0
+  force: {x: 0, y: 0, z: 0}
+  bulletType: 0
+  isGetTarget: 0
+  speed: 20
+--- !u!54 &8541051486027365006
+Rigidbody:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7473170563405908938}
+  serializedVersion: 2
+  m_Mass: 1
+  m_Drag: 0
+  m_AngularDrag: 0.05
+  m_UseGravity: 0
+  m_IsKinematic: 0
+  m_Interpolate: 0
+  m_Constraints: 56
+  m_CollisionDetection: 0
+--- !u!1 &7473170563757732086
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 7473170563757732085}
+  - component: {fileID: 7473170563757732084}
+  m_Layer: 0
+  m_Name: Arrow (1)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &7473170563757732085
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7473170563757732086}
+  m_LocalRotation: {x: 0, y: 0, z: 0.7071068, w: 0.7071068}
+  m_LocalPosition: {x: 0.3, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 7473170563405908937}
+  m_RootOrder: 2
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90}
+--- !u!212 &7473170563757732084
+SpriteRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7473170563757732086}
+  m_Enabled: 1
+  m_CastShadows: 0
+  m_ReceiveShadows: 0
+  m_DynamicOccludee: 1
+  m_StaticShadowCaster: 0
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RayTracingMode: 0
+  m_RayTraceProcedural: 0
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 10754, 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: 0
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: 0
+  m_SortingLayer: 0
+  m_SortingOrder: 0
+  m_Sprite: {fileID: 7482667652216324306, guid: 75f5f34dc1b5347e0b8351032682f224, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_FlipX: 0
+  m_FlipY: 0
+  m_DrawMode: 1
+  m_Size: {x: 0.2, y: 0.2}
+  m_AdaptiveModeThreshold: 0.5
+  m_SpriteTileMode: 0
+  m_WasSpriteAssigned: 1
+  m_MaskInteraction: 0
+  m_SpriteSortPoint: 0

+ 7 - 0
ActionTowerDefense/Assets/Resources/Prefab/Arrow.prefab.meta

@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 0460e8750cef0df4292f6d2bb56a4843
+PrefabImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 130 - 2
ActionTowerDefense/Assets/Resources/Prefab/Demonic_Arrow.prefab

@@ -1,5 +1,36 @@
 %YAML 1.1
 %TAG !u! tag:unity3d.com,2011:
+--- !u!1 &608566006687189219
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 8482269351142858204}
+  m_Layer: 7
+  m_Name: ShootPos
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &8482269351142858204
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 608566006687189219}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: -0.5, y: 1, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 6561999689701501378}
+  m_RootOrder: 4
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!1 &1190225091429982147
 GameObject:
   m_ObjectHideFlags: 0
@@ -312,6 +343,37 @@ MonoBehaviour:
     layerMixModes: 01000000
     layerBlendModes: 01000000
   updateTiming: 1
+--- !u!1 &2475269063027159835
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 776105162125788029}
+  m_Layer: 7
+  m_Name: ShootPos2
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &776105162125788029
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2475269063027159835}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: -0.5, y: 1, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 6561999689701501378}
+  m_RootOrder: 5
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!1 &2616922587087395095
 GameObject:
   m_ObjectHideFlags: 0
@@ -595,6 +657,7 @@ GameObject:
   m_Component:
   - component: {fileID: 6561999689701501378}
   - component: {fileID: 6864986857343475389}
+  - component: {fileID: 7514976921726773167}
   m_Layer: 7
   m_Name: Colliders
   m_TagString: Untagged
@@ -618,6 +681,9 @@ Transform:
   - {fileID: 5101632837952520453}
   - {fileID: 3215317859961215224}
   - {fileID: 6076127848463763}
+  - {fileID: 8482269351142858204}
+  - {fileID: 776105162125788029}
+  - {fileID: 6220414675483084992}
   m_Father: {fileID: 5769591908339262981}
   m_RootOrder: 1
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -641,6 +707,19 @@ Animator:
   m_HasTransformHierarchy: 1
   m_AllowConstantClipSamplingOptimization: 1
   m_KeepAnimatorControllerStateOnDisable: 0
+--- !u!114 &7514976921726773167
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6911591061214860228}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 492983f5b77df7e4b82cba32bc74fb94, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  owner: {fileID: 0}
 --- !u!1 &7414577738945366659
 GameObject:
   m_ObjectHideFlags: 0
@@ -742,6 +821,37 @@ MonoBehaviour:
   m_BlockingMask:
     serializedVersion: 2
     m_Bits: 4294967295
+--- !u!1 &8534270758388991037
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 6220414675483084992}
+  m_Layer: 7
+  m_Name: ShootPos3
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &6220414675483084992
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8534270758388991037}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: -0.5, y: 1, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 6561999689701501378}
+  m_RootOrder: 6
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!1 &8639832132450015563
 GameObject:
   m_ObjectHideFlags: 0
@@ -861,8 +971,27 @@ MonoBehaviour:
   isDie: 0
   totalHp: 100
   hp: 0
-  attack1Infos: []
+  attack1Infos:
+  - damage: 10
+    attackDir: {x: -1, y: 0, z: 0}
+    force: 1000
+  - damage: 10
+    attackDir: {x: -1, y: 0, z: 0}
+    force: 1000
+  - damage: 10
+    attackDir: {x: -1, y: 0, z: 0}
+    force: 1000
+  attack2Infos:
+  - damage: 10
+    attackDir: {x: -1, y: 0, z: 0}
+    force: 1000
   attackTriggers: []
+  attackType: 1
+  bulletPrefab: {fileID: 7473170563405908938, guid: 0460e8750cef0df4292f6d2bb56a4843, type: 3}
+  shootPos:
+  - {fileID: 8482269351142858204}
+  - {fileID: 776105162125788029}
+  - {fileID: 6220414675483084992}
   foot: {fileID: 8639832132450015562}
   extraRiseGravity: -28.8
   extraFallGravity: -14.4
@@ -873,7 +1002,6 @@ MonoBehaviour:
   searchState: 0
   totalAttack2Time: 1.3
   targetTypes: 0400000005000000
-  attack2Infos: []
   attackDistance: 10
   canFly: 0
   canHitFly: 0

+ 3 - 33
ActionTowerDefense/Assets/Scripts/AttackTrigger.cs

@@ -1,3 +1,4 @@
+using Base.Common;
 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
@@ -31,40 +32,9 @@ public class AttackTrigger : MonoBehaviour
             if (!triged)
             {
                 trigedObjs.Add(hitTrigger);
-                switch (owner.tag)
+                if (Util.CheckCanHit(owner.tag, hitTrigger.owner.tag))
                 {
-                    case "Player":
-                        if (hitTrigger.owner.tag == "Enemy" || hitTrigger.owner.tag == "EnemyTower")
-                        {
-                            hitTrigger.BeHit(damage, force);
-                        }
-                        break;
-                    case "Demonic":
-                        if (hitTrigger.owner.tag == "Enemy" || hitTrigger.owner.tag == "EnemyTower")
-                        {
-                            hitTrigger.BeHit(damage, force);
-                        }
-                        break;
-                    case "Tower":
-                        if (hitTrigger.owner.tag == "Enemy" || hitTrigger.owner.tag == "EnemyTower")
-                        {
-                            hitTrigger.BeHit(damage, force);
-                        }
-                        break;
-                    case "Enemy":
-                        if (hitTrigger.owner.tag == "Player" || hitTrigger.owner.tag == "Demonic" || hitTrigger.owner.tag == "Tower")
-                        {
-                            hitTrigger.BeHit(damage, force);
-                        }
-                        break;
-                    case "EnemyTower":
-                        if (hitTrigger.owner.tag == "Player" || hitTrigger.owner.tag == "Demonic" || hitTrigger.owner.tag == "Tower")
-                        {
-                            hitTrigger.BeHit(damage, force);
-                        }
-                        break;
-                    default:
-                        break;
+                    hitTrigger.BeHit(damage, force);
                 }
             }
         }

+ 88 - 0
ActionTowerDefense/Assets/Scripts/Bullet.cs

@@ -0,0 +1,88 @@
+using Base.Common;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public enum BulletType
+{
+    Single = 0,//单体目标,触发后即销毁
+    Penetrate = 1,//穿透,可击中多个目标
+    Bomb = 2,//击中目标后爆炸
+}
+public class Bullet : MonoBehaviour
+{
+    public Character owner;
+    public Rigidbody rb;
+    public List<BeHitTrigger> trigedObjs;
+    public int damage;
+    public Vector3 force;
+    public BulletType bulletType;
+    public bool isGetTarget = false;
+    public float speed;
+
+    private void Awake()
+    {
+        //owner = GetComponentInParent<Character>();
+        rb = GetComponent<Rigidbody>();
+    }
+
+    public void BeShoot(Character own, Vector3 shootPos, Vector3 dir, int dmg, Vector3 fc)
+    {
+        transform.position = shootPos;
+        transform.right = -dir;
+        gameObject.SetActive(true);
+        isGetTarget = false;
+        owner = own;
+        damage = dmg;
+        force = fc;
+        rb.velocity = dir * speed;
+    }
+
+    private void OnTriggerEnter(Collider other)
+    {
+        if (isGetTarget)
+        {
+            return;
+        }
+        BeHitTrigger hitTrigger = other.GetComponent<BeHitTrigger>();
+        if (hitTrigger != null)
+        {
+            bool triged = false;
+            for (int i = 0; i < trigedObjs.Count; i++)
+            {
+                if (trigedObjs[i] == hitTrigger)
+                {
+                    triged = true;
+                    break;
+                }
+            }
+            if (!triged)
+            {
+                trigedObjs.Add(hitTrigger);
+                if (Util.CheckCanHit(owner.tag, hitTrigger.owner.tag))
+                {
+                    switch (bulletType)
+                    {
+                        case BulletType.Single:
+                            hitTrigger.BeHit(damage, force);
+                            isGetTarget = true;
+                            gameObject.SetActive(false);
+                            break;
+                        case BulletType.Penetrate:
+                            hitTrigger.BeHit(damage, force);
+                            break;
+                        case BulletType.Bomb:
+                            break;
+                        default:
+                            break;
+                    }
+                }
+            }
+        }
+    }
+
+    private void OnEnable()
+    {
+        trigedObjs.Clear();
+    }
+}

+ 11 - 0
ActionTowerDefense/Assets/Scripts/Bullet.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 9a4a2dbc1e482cd4b9f1532e1fddcb30
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 26 - 0
ActionTowerDefense/Assets/Scripts/Character.cs

@@ -37,7 +37,11 @@ public class Character : MonoBehaviour
     public int totalHp = 100;
     public int hp;
     public List<AttackInfo> attack1Infos;
+    public List<AttackInfo> attack2Infos;
     public List<AttackTrigger> attackTriggers;
+    public AttackType attackType;
+    public GameObject bulletPrefab;
+    public List<Transform> shootPos;
 
     public virtual void Init()
     {
@@ -93,4 +97,26 @@ public class Character : MonoBehaviour
             ChangeState(CharacterState.Hurt);
         }
     }
+
+    public void AttackShootEvent(int attackId, int shootId)
+    {
+        AttackInfo attackInfo;
+        if (attackId == 1)
+        {
+            attackInfo = attack1Infos[shootId];
+        }
+        else
+        {
+            attackInfo = attack2Infos[shootId];
+        }
+        GameObject bulletObj = PoolManager.Instantiate(bulletPrefab);
+        Bullet bullet = bulletObj.GetComponent<Bullet>();
+        bullet.damage = attackInfo.damage;
+        Vector3 attackDir = attackInfo.attackDir.normalized;
+        if (bodyTrans.localScale.x < 0)
+        {
+            attackDir.x = -attackDir.x;
+        }
+        bullet.BeShoot(this, shootPos[shootId].position, attackDir, attackInfo.damage, attackDir * attackInfo.force);
+    }
 }

+ 28 - 0
ActionTowerDefense/Assets/Scripts/CharacterColliders.cs

@@ -0,0 +1,28 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class CharacterColliders : MonoBehaviour
+{
+    public Character owner;
+
+    private void Awake()
+    {
+        owner = GetComponentInParent<Character>();
+    }
+
+    public void Test()
+    {
+
+    }
+
+    public void Attack1ShootEvent(int shootId)
+    {
+        owner.AttackShootEvent(1, shootId);
+    }
+
+    public void Attack2ShootEvent(int shootId)
+    {
+        owner.AttackShootEvent(2, shootId);
+    }
+}

+ 11 - 0
ActionTowerDefense/Assets/Scripts/CharacterColliders.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 492983f5b77df7e4b82cba32bc74fb94
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 34 - 17
ActionTowerDefense/Assets/Scripts/Demonic.cs

@@ -10,7 +10,6 @@ public class Demonic : MoveCharacter
     public SearchState searchState;
     public float totalAttack2Time = 0.5f;
     public List<TargetType> targetTypes;
-    public List<AttackInfo> attack2Infos;
     public float attackDistance;
     public bool canFly = false;
     public bool canHitFly = false;
@@ -352,15 +351,24 @@ public class Demonic : MoveCharacter
         ani.Play("attack1", 0, 0);
         aniCollider.Play("Attack1", 1, 0);
         attackTime = totalAttack1Time;
-        for (int i = 0; i < attack1Infos.Count; i++)
+        switch (attackType)
         {
-            attackTriggers[i].damage = attack1Infos[i].damage;
-            Vector3 attackDir = attack1Infos[i].attackDir.normalized;
-            if (bodyTrans.localScale.x < 0)
-            {
-                attackDir.x = -attackDir.x;
-            }
-            attackTriggers[i].force = attackDir * attack1Infos[i].force;
+            case AttackType.Melee:
+                for (int i = 0; i < attack1Infos.Count; i++)
+                {
+                    attackTriggers[i].damage = attack1Infos[i].damage;
+                    Vector3 attackDir = attack1Infos[i].attackDir.normalized;
+                    if (bodyTrans.localScale.x < 0)
+                    {
+                        attackDir.x = -attackDir.x;
+                    }
+                    attackTriggers[i].force = attackDir * attack1Infos[i].force;
+                }
+                break;
+            case AttackType.Shoot:
+                break;
+            default:
+                break;
         }
         ChangeState(CharacterState.Attack);
     }
@@ -386,15 +394,24 @@ public class Demonic : MoveCharacter
         ani.Play("attack2", 0, 0);
         aniCollider.Play("Attack2", 1, 0);
         attackTime = totalAttack2Time;
-        for (int i = 0; i < attack2Infos.Count; i++)
+        switch (attackType)
         {
-            attackTriggers[i].damage = attack2Infos[i].damage;
-            Vector3 attackDir = attack2Infos[i].attackDir.normalized;
-            if (bodyTrans.localScale.x < 0)
-            {
-                attackDir.x = -attackDir.x;
-            }
-            attackTriggers[i].force = attackDir * attack2Infos[i].force;
+            case AttackType.Melee:
+                for (int i = 0; i < attack2Infos.Count; i++)
+                {
+                    attackTriggers[i].damage = attack2Infos[i].damage;
+                    Vector3 attackDir = attack2Infos[i].attackDir.normalized;
+                    if (bodyTrans.localScale.x < 0)
+                    {
+                        attackDir.x = -attackDir.x;
+                    }
+                    attackTriggers[i].force = attackDir * attack2Infos[i].force;
+                }
+                break;
+            case AttackType.Shoot:
+                break;
+            default:
+                break;
         }
         ChangeState(CharacterState.Attack);
     }

+ 25 - 9
ActionTowerDefense/Assets/Scripts/Enemy.cs

@@ -3,6 +3,7 @@ using Spine;
 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
+using Base.Common;
 
 public enum TargetType
 {
@@ -14,6 +15,12 @@ public enum TargetType
     EnemyTower = 5,
 }
 
+public enum AttackType
+{
+    Melee = 0,//近战
+    Shoot = 1,//射击
+}
+
 public enum SearchState
 {
     NoTarget = 0,//搜索范围内没有目标
@@ -28,7 +35,6 @@ public class Enemy : MoveCharacter
     public SearchState searchState;
     public float totalAttack2Time = 0.5f;
     public List<TargetType> targetTypes;
-    public List<AttackInfo> attack2Infos;
     public float attackDistance;
     public bool canFly = false;
     public bool canHitFly = false;
@@ -473,15 +479,25 @@ public class Enemy : MoveCharacter
         ani.Play("attack1", 0, 0);
         aniCollider.Play("Attack1", 1, 0);
         attackTime = totalAttack1Time;
-        for (int i = 0; i < attack1Infos.Count; i++)
+        switch (attackType)
         {
-            attackTriggers[i].damage = attack1Infos[i].damage;
-            Vector3 attackDir = attack1Infos[i].attackDir.normalized;
-            if (bodyTrans.localScale.x < 0)
-            {
-                attackDir.x = -attackDir.x;
-            }
-            attackTriggers[i].force = attackDir * attack1Infos[i].force;
+            case AttackType.Melee:
+                for (int i = 0; i < attack1Infos.Count; i++)
+                {
+                    attackTriggers[i].damage = attack1Infos[i].damage;
+                    Vector3 attackDir = attack1Infos[i].attackDir.normalized;
+                    if (bodyTrans.localScale.x < 0)
+                    {
+                        attackDir.x = -attackDir.x;
+                    }
+                    attackTriggers[i].force = attackDir * attack1Infos[i].force;
+                }
+                break;
+            case AttackType.Shoot:
+                
+                break;
+            default:
+                break;
         }
         ChangeState(CharacterState.Attack);
     }

+ 5 - 4
ActionTowerDefense/Assets/Scripts/PlayerController.cs

@@ -8,6 +8,7 @@ using UnityEngine.Playables;
 using System.ComponentModel;
 using Unity.VisualScripting;
 using System;
+using Base.Common;
 
 [Serializable]
 public struct AttackInfo
@@ -702,7 +703,7 @@ public class PlayerController : MoveCharacter
             return;
         }
         GameObject prefab = demonicPrefabs[id];
-        GameObject demonicObj = Instantiate(prefab);
+        GameObject demonicObj = PoolManager.Instantiate(prefab);
         Demonic demonic = demonicObj.GetComponent<Demonic>();
         demonicObj.transform.parent = null;
         demonicObj.transform.localEulerAngles = Vector3.zero;
@@ -713,15 +714,15 @@ public class PlayerController : MoveCharacter
             demonicObj.transform.position = transform.position + offset;
             if (demonic.bodyTrans.localScale.x < 0)
             {
-                Turn();
+                demonic.Turn();
             }
         }
         else
         {
             demonicObj.transform.position = transform.position + new Vector3(-offset.x, offset.y, offset.z);
-            if (demonic.bodyTrans.localScale.x < 0)
+            if (demonic.bodyTrans.localScale.x > 0)
             {
-                Turn();
+                demonic.Turn();
             }
         }
         demonic.BeSummon(100);

+ 40 - 0
ActionTowerDefense/Assets/Scripts/Util.cs

@@ -676,5 +676,45 @@ namespace Base.Common
                 list[n] = value;
             }
         }
+
+        public static bool CheckCanHit(string selfTag, string otherTag)
+        {
+            switch (selfTag)
+            {
+                case "Player":
+                    if (otherTag == "Enemy" || otherTag == "EnemyTower")
+                    {
+                        return true;
+                    }
+                    break;
+                case "Demonic":
+                    if (otherTag == "Enemy" || otherTag == "EnemyTower")
+                    {
+                        return true;
+                    }
+                    break;
+                case "Tower":
+                    if (otherTag == "Enemy" || otherTag == "EnemyTower")
+                    {
+                        return true;
+                    }
+                    break;
+                case "Enemy":
+                    if (otherTag == "Player" || otherTag == "Demonic" || otherTag == "Tower")
+                    {
+                        return true;
+                    }
+                    break;
+                case "EnemyTower":
+                    if (otherTag == "Player" || otherTag == "Demonic" || otherTag == "Tower")
+                    {
+                        return true;
+                    }
+                    break;
+                default:
+                    break;
+            }
+            return false;
+        }
     }
 }