Sfoglia il codice sorgente

实现2.0岩的标签技能

HY-LSZNWIN10\Administrator 1 mese fa
parent
commit
99b5847646

+ 297 - 0
ActionTowerDefense/Assets/Resources/Prefab/Skills/StoneBullet.prefab

@@ -0,0 +1,297 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &3788961270241326735
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 396312011331981770}
+  - component: {fileID: 8028802900452635310}
+  m_Layer: 19
+  m_Name: BeHitTrigger
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &396312011331981770
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3788961270241326735}
+  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!135 &8028802900452635310
+SphereCollider:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3788961270241326735}
+  m_Material: {fileID: 0}
+  m_IsTrigger: 1
+  m_Enabled: 1
+  serializedVersion: 2
+  m_Radius: 0.5
+  m_Center: {x: 0, y: 0, z: 0}
+--- !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, 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: 2100000, guid: 9dfc825aed78fcd4ba02077103263b40, type: 2}
+  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: -1730265859
+  m_SortingLayer: 4
+  m_SortingOrder: 1
+  m_Sprite: {fileID: 21300000, guid: 00cd8e2a38cbe364aa235a00e807f9e4, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_FlipX: 0
+  m_FlipY: 0
+  m_DrawMode: 1
+  m_Size: {x: 1, y: 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: 7485360237884938143}
+  - component: {fileID: 8541051486027365006}
+  - component: {fileID: 7936292467376817072}
+  m_Layer: 14
+  m_Name: StoneBullet
+  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: 0.9, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 7473170561697162167}
+  - {fileID: 396312011331981770}
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {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: 
+  stopTime: 1.5
+  isBulletMove: 1
+  owner: {fileID: 0}
+  attackMethod:
+    attackName: 
+    attackType: 2
+    attackInfo:
+      attackValue: 6
+      damage: 6
+      attackDir: {x: -1, y: 1, z: 0}
+      criticalChance: 0
+      lifesteal: 0
+      effect: {fileID: 0}
+      attackEffect: 
+      attackMethod_Type: 0
+      floatState:
+        time: 0
+        upTime: {x: 0, y: 0}
+        backSpeed: {x: 0, y: 0}
+        rotateSpeed: {x: 0, y: 0}
+        height: {x: 0, y: 0}
+        ControlOrder: 0
+      blowUp:
+        directionType: 0
+        dir: {x: 0, y: 0, z: 0}
+        dirRandom: {x: 0, y: 0, z: 0}
+        force: 0
+        time: 0
+        haveLandingDamage: 0
+        landingDamageRate: 0
+        ControlOrder: 0
+      shotDown:
+        directionType: 0
+        dir: {x: 0, y: 0, z: 0}
+        dirRandom: {x: 0, y: 0, z: 0}
+        force: 0
+        time: 0
+        haveLandingDamage: 0
+        landingDamage: 0
+        ControlOrder: 0
+      weak:
+        time: 0
+        ControlOrder: 0
+      armorPiercing:
+        rate: 0
+      vulnerable:
+        rate: 0
+        time: 0
+      stackingWounds:
+        damage: 0
+        time: 0
+      changeDamage:
+        rate: 0
+      sustainedInjury:
+        damage: 0
+    attackTrigger: {fileID: 0}
+    needToChange: 0
+    attackDistance: 0
+    maxAttackDis: 0
+    minAttackDis: 0
+    searchMode: 0
+    canHitFly: 0
+    bulletPrefab: {fileID: 0}
+    shootPos: []
+    maxUpAngle: 0
+    maxDownAngle: 0
+    shootTrack: 0
+    shootAlwaysTrack: 0
+    skill: {fileID: 0}
+    additionalEffects: 0
+  rb: {fileID: 0}
+  trigedObjs: []
+  bulletType: 4
+  isGetTarget: 0
+  speed: 12
+  maxFlyTime: 5
+  flyTime: 0
+  trackTarget: {fileID: 0}
+  effect: {fileID: 0}
+  disappearEffect: {fileID: 0}
+  canTransmit: 0
+  haveTransmit: 0
+  transmitTime: 0
+  canStop: 0
+  isTrack: 0
+  canAlwaysTrack: 0
+  isCreatedByDemonicSummon: 0
+  canPassGround: 0
+  originalScale: {x: 0, y: 0, z: 0}
+--- !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: 6
+  m_Drag: 0
+  m_AngularDrag: 0
+  m_UseGravity: 1
+  m_IsKinematic: 0
+  m_Interpolate: 0
+  m_Constraints: 120
+  m_CollisionDetection: 1
+--- !u!135 &7936292467376817072
+SphereCollider:
+  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_Radius: 0.5
+  m_Center: {x: 0, y: 0, z: 0}

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

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

+ 566 - 0
ActionTowerDefense/Assets/Resources/Prefab/StoneStatue.prefab

@@ -0,0 +1,566 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &3693514606479462441
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 3693514606479462440}
+  - component: {fileID: 3693514606479462438}
+  - component: {fileID: 3693514606479462437}
+  - component: {fileID: 6041935775012871448}
+  m_Layer: 8
+  m_Name: StoneStatue
+  m_TagString: Enemy
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &3693514606479462440
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3693514606479462441}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 168.6, y: -1.2, z: 0.00004370143}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 3693514607685348856}
+  - {fileID: 1252861290751352071}
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!54 &3693514606479462438
+Rigidbody:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3693514606479462441}
+  serializedVersion: 2
+  m_Mass: 1
+  m_Drag: 0
+  m_AngularDrag: 0.05
+  m_UseGravity: 1
+  m_IsKinematic: 0
+  m_Interpolate: 0
+  m_Constraints: 122
+  m_CollisionDetection: 0
+--- !u!135 &3693514606479462437
+SphereCollider:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3693514606479462441}
+  m_Material: {fileID: 0}
+  m_IsTrigger: 0
+  m_Enabled: 1
+  serializedVersion: 2
+  m_Radius: 1
+  m_Center: {x: 0, y: 0, z: 0}
+--- !u!114 &6041935775012871448
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3693514606479462441}
+  m_Enabled: 0
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 565fb65a48a8ef648b3096d46e15efd9, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  attackInterval: 5
+  addAttackEffect: {fileID: 0}
+  isAttackTriggerOn: 0
+  targetTypes: 040000000500000006000000
+  attackSummonId: 0
+  attackMarchId: 0
+  summonTime: []
+  attackMethod_summon: []
+  attackMethod_march:
+  - attackName: attack_march
+    attackType: 2
+    attackInfo:
+      attackValue: 0
+      damage: 0
+      attackDir: {x: -1, y: 0, z: 0}
+      criticalChance: 0
+      lifesteal: 0
+      effect: {fileID: 0}
+      attackEffect: 
+      attackMethod_Type: 0
+      floatState:
+        time: 0
+        upTime: {x: 0, y: 0}
+        backSpeed: {x: 0, y: 0}
+        rotateSpeed: {x: 0, y: 0}
+        height: {x: 0, y: 0}
+        ControlOrder: 0
+      blowUp:
+        directionType: 0
+        dir: {x: 0, y: 0, z: 0}
+        dirRandom: {x: 0, y: 0, z: 0}
+        force: 0
+        time: 0
+        haveLandingDamage: 0
+        landingDamageRate: 0
+        ControlOrder: 0
+      shotDown:
+        directionType: 0
+        dir: {x: 0, y: 0, z: 0}
+        dirRandom: {x: 0, y: 0, z: 0}
+        force: 0
+        time: 0
+        haveLandingDamage: 0
+        landingDamage: 0
+        ControlOrder: 0
+      weak:
+        time: 0
+        ControlOrder: 0
+      armorPiercing:
+        rate: 0
+      vulnerable:
+        rate: 0
+        time: 0
+      stackingWounds:
+        damage: 0
+        time: 0
+      changeDamage:
+        rate: 0
+      sustainedInjury:
+        damage: 0
+    attackTrigger: {fileID: 0}
+    needToChange: 1
+    attackDistance: 0
+    maxAttackDis: 15
+    minAttackDis: 9
+    searchMode: 0
+    canHitFly: 1
+    bulletPrefab: {fileID: 0}
+    shootPos: []
+    maxUpAngle: 0
+    maxDownAngle: 0
+    shootTrack: 0
+    shootAlwaysTrack: 0
+    skill: {fileID: 0}
+    additionalEffects: 0
+  curAttackMethod:
+    attackName: 
+    attackType: 0
+    attackInfo:
+      attackValue: 0
+      damage: 0
+      attackDir: {x: 0, y: 0, z: 0}
+      criticalChance: 0
+      lifesteal: 0
+      effect: {fileID: 0}
+      attackEffect: 
+      attackMethod_Type: 0
+      floatState:
+        time: 0
+        upTime: {x: 0, y: 0}
+        backSpeed: {x: 0, y: 0}
+        rotateSpeed: {x: 0, y: 0}
+        height: {x: 0, y: 0}
+        ControlOrder: 0
+      blowUp:
+        directionType: 0
+        dir: {x: 0, y: 0, z: 0}
+        dirRandom: {x: 0, y: 0, z: 0}
+        force: 0
+        time: 0
+        haveLandingDamage: 0
+        landingDamageRate: 0
+        ControlOrder: 0
+      shotDown:
+        directionType: 0
+        dir: {x: 0, y: 0, z: 0}
+        dirRandom: {x: 0, y: 0, z: 0}
+        force: 0
+        time: 0
+        haveLandingDamage: 0
+        landingDamage: 0
+        ControlOrder: 0
+      weak:
+        time: 0
+        ControlOrder: 0
+      armorPiercing:
+        rate: 0
+      vulnerable:
+        rate: 0
+        time: 0
+      stackingWounds:
+        damage: 0
+        time: 0
+      changeDamage:
+        rate: 0
+      sustainedInjury:
+        damage: 0
+    attackTrigger: {fileID: 0}
+    needToChange: 0
+    attackDistance: 0
+    maxAttackDis: 0
+    minAttackDis: 0
+    searchMode: 0
+    canHitFly: 0
+    bulletPrefab: {fileID: 0}
+    shootPos: []
+    maxUpAngle: 0
+    maxDownAngle: 0
+    shootTrack: 0
+    shootAlwaysTrack: 0
+    skill: {fileID: 0}
+    additionalEffects: 0
+  attackKeys:
+  - aniName: attack_march
+    keys:
+    - attackType: 0
+      startKeyName: attack_on
+      startKeyTime: 0.43333337
+      endType: 1
+      endKeyName: attack_off
+      endKeyTime: 0.6666667
+    totalTime: 2
+  - aniName: attack_summon
+    keys:
+    - attackType: 0
+      startKeyName: attack_on
+      startKeyTime: 0.43333337
+      endType: 1
+      endKeyName: attack_off
+      endKeyTime: 0.6666667
+    totalTime: 1
+  keyTimes: []
+  attackTime: 0
+  attackKeyCount: 0
+  nextStartKeyTime: 0
+  nextEndKeyTime: 0
+  curKeyNum: 0
+  beTargetCharacter: []
+  lifesteal: 1
+--- !u!1 &3693514607685348857
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 3693514607685348856}
+  - component: {fileID: 3693514607685348855}
+  m_Layer: 0
+  m_Name: Sprite
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &3693514607685348856
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3693514607685348857}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 0.5, y: 0.5, z: 0.5}
+  m_ConstrainProportionsScale: 1
+  m_Children: []
+  m_Father: {fileID: 3693514606479462440}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!212 &3693514607685348855
+SpriteRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3693514607685348857}
+  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: eb8e6d9d71c428a40a16636e97375fa1, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_FlipX: 0
+  m_FlipY: 0
+  m_DrawMode: 0
+  m_Size: {x: 0.64, y: 0.64}
+  m_AdaptiveModeThreshold: 0.5
+  m_SpriteTileMode: 0
+  m_WasSpriteAssigned: 1
+  m_MaskInteraction: 0
+  m_SpriteSortPoint: 0
+--- !u!1 &6845539176760073687
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1252861290751352071}
+  - component: {fileID: 6073786376256734317}
+  - component: {fileID: 4158865822622772605}
+  - component: {fileID: 5272784615395909684}
+  m_Layer: 19
+  m_Name: BeHitTrigger
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &1252861290751352071
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6845539176760073687}
+  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: 3693514606479462440}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &6073786376256734317
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6845539176760073687}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: cafa7e2b84718074c9f7830a1200c074, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  bulletPrefab: {fileID: 7473170563405908938, guid: 72d95380804ae13429d1e06941791e9f, type: 3}
+  parent: {fileID: 3693514606479462441}
+  bulletCount: 3
+  baseSpeed: 10
+  speedRandomRange: 1
+  angleRandomRange: 5
+  leftBaseAngle: 135
+  leftAngleRange: 30
+  rightBaseAngle: 45
+  rightAngleRange: 30
+  isVlowUp: 0
+  damage: 0
+--- !u!135 &4158865822622772605
+SphereCollider:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6845539176760073687}
+  m_Material: {fileID: 0}
+  m_IsTrigger: 1
+  m_Enabled: 1
+  serializedVersion: 2
+  m_Radius: 1
+  m_Center: {x: 0, y: 0, z: 0}
+--- !u!114 &5272784615395909684
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6845539176760073687}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 565fb65a48a8ef648b3096d46e15efd9, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  attackInterval: 0
+  addAttackEffect: {fileID: 0}
+  isAttackTriggerOn: 0
+  targetTypes: 
+  attackSummonId: 0
+  attackMarchId: 0
+  summonTime: []
+  attackMethod_summon: []
+  attackMethod_march:
+  - attackName: 
+    attackType: 0
+    attackInfo:
+      attackValue: 13
+      damage: 10
+      attackDir: {x: 0, y: 0, z: 0}
+      criticalChance: 0
+      lifesteal: 0
+      effect: {fileID: 0}
+      attackEffect: 01000000
+      attackMethod_Type: 0
+      floatState:
+        time: 0
+        upTime: {x: 0, y: 0}
+        backSpeed: {x: 0, y: 0}
+        rotateSpeed: {x: 0, y: 0}
+        height: {x: 0, y: 0}
+        ControlOrder: 0
+      blowUp:
+        directionType: 1
+        dir: {x: -1, y: 1, z: 0}
+        dirRandom: {x: 0.5, y: 0.5, z: 0}
+        force: 110
+        time: 0.5
+        haveLandingDamage: 1
+        landingDamageRate: 1
+        ControlOrder: 0
+      shotDown:
+        directionType: 0
+        dir: {x: 0, y: 0, z: 0}
+        dirRandom: {x: 0, y: 0, z: 0}
+        force: 0
+        time: 0
+        haveLandingDamage: 0
+        landingDamage: 0
+        ControlOrder: 0
+      weak:
+        time: 0
+        ControlOrder: 0
+      armorPiercing:
+        rate: 0
+      vulnerable:
+        rate: 0
+        time: 0
+      stackingWounds:
+        damage: 0
+        time: 0
+      changeDamage:
+        rate: 0
+      sustainedInjury:
+        damage: 0
+    attackTrigger: {fileID: 0}
+    needToChange: 0
+    attackDistance: 0
+    maxAttackDis: 0
+    minAttackDis: 0
+    searchMode: 0
+    canHitFly: 0
+    bulletPrefab: {fileID: 0}
+    shootPos: []
+    maxUpAngle: 0
+    maxDownAngle: 0
+    shootTrack: 0
+    shootAlwaysTrack: 0
+    skill: {fileID: 0}
+    additionalEffects: 0
+  curAttackMethod:
+    attackName: 
+    attackType: 0
+    attackInfo:
+      attackValue: 0
+      damage: 0
+      attackDir: {x: 0, y: 0, z: 0}
+      criticalChance: 0
+      lifesteal: 0
+      effect: {fileID: 0}
+      attackEffect: 
+      attackMethod_Type: 0
+      floatState:
+        time: 0
+        upTime: {x: 0, y: 0}
+        backSpeed: {x: 0, y: 0}
+        rotateSpeed: {x: 0, y: 0}
+        height: {x: 0, y: 0}
+        ControlOrder: 0
+      blowUp:
+        directionType: 0
+        dir: {x: 0, y: 0, z: 0}
+        dirRandom: {x: 0, y: 0, z: 0}
+        force: 0
+        time: 0
+        haveLandingDamage: 0
+        landingDamageRate: 0
+        ControlOrder: 0
+      shotDown:
+        directionType: 0
+        dir: {x: 0, y: 0, z: 0}
+        dirRandom: {x: 0, y: 0, z: 0}
+        force: 0
+        time: 0
+        haveLandingDamage: 0
+        landingDamage: 0
+        ControlOrder: 0
+      weak:
+        time: 0
+        ControlOrder: 0
+      armorPiercing:
+        rate: 0
+      vulnerable:
+        rate: 0
+        time: 0
+      stackingWounds:
+        damage: 0
+        time: 0
+      changeDamage:
+        rate: 0
+      sustainedInjury:
+        damage: 0
+    attackTrigger: {fileID: 0}
+    needToChange: 0
+    attackDistance: 0
+    maxAttackDis: 0
+    minAttackDis: 0
+    searchMode: 0
+    canHitFly: 0
+    bulletPrefab: {fileID: 0}
+    shootPos: []
+    maxUpAngle: 0
+    maxDownAngle: 0
+    shootTrack: 0
+    shootAlwaysTrack: 0
+    skill: {fileID: 0}
+    additionalEffects: 0
+  attackKeys: []
+  keyTimes: []
+  attackTime: 0
+  attackKeyCount: 0
+  nextStartKeyTime: 0
+  nextEndKeyTime: 0
+  curKeyNum: 0
+  beTargetCharacter: []
+  lifesteal: 1

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

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

+ 8 - 0
ActionTowerDefense/Assets/Scenes/Game.unity

@@ -23281,6 +23281,10 @@ PrefabInstance:
       propertyPath: isFireEnable
       value: 0
       objectReference: {fileID: 0}
+    - target: {fileID: 1880576200062196084, guid: bd8119632a1311b44ab791a903582d59, type: 3}
+      propertyPath: isRockEnable
+      value: 1
+      objectReference: {fileID: 0}
     - target: {fileID: 1880576200062196084, guid: bd8119632a1311b44ab791a903582d59, type: 3}
       propertyPath: electrifyTime
       value: 5
@@ -23293,6 +23297,10 @@ PrefabInstance:
       propertyPath: fireProbability
       value: 60
       objectReference: {fileID: 0}
+    - target: {fileID: 1880576200062196084, guid: bd8119632a1311b44ab791a903582d59, type: 3}
+      propertyPath: rockProbability
+      value: 100
+      objectReference: {fileID: 0}
     - target: {fileID: 1880576200062196084, guid: bd8119632a1311b44ab791a903582d59, type: 3}
       propertyPath: groundProbability
       value: 80

+ 1 - 1
ActionTowerDefense/Assets/Scripts/Bullet.cs

@@ -146,7 +146,7 @@ public class Bullet : MonoBehaviour
 
     private void OnTriggerEnter(Collider other)
     {
-        if (isGetTarget || isInVain || (bulletType == BulletType.Throw && rb.velocity.y > 0))
+        if (isGetTarget || isInVain /*|| (bulletType == BulletType.Throw && rb.velocity.y > 0)*/)
         {
             return;
         }

+ 1 - 1
ActionTowerDefense/Assets/Scripts/Characters/Character.cs

@@ -30,7 +30,7 @@ public enum CharacterState
     SpecialStatus_BlowUp,
     SpecialStatus_Weak,
 
-    Petrify, //石化
+    //Petrify, //石化
 
     LockSoul = 25,          //在锁魂塔中
     Conduct = 26,           //在指挥中

+ 3 - 42
ActionTowerDefense/Assets/Scripts/Characters/Demonic.cs

@@ -476,22 +476,17 @@ public class Demonic : MoveCharacter
                 }
                 break;
             case CharacterState.Fall:
-                if (foot.TrigGround || (canFly && !isDie && !isPetrify))
+                if (foot.TrigGround || (canFly && !isDie))
                 {
                     if (isDie)
                     {
                         ChangeState(CharacterState.Die);
                         break;
                     }
-                    else if (isPetrify)
-                    {
-                        ChangeState(CharacterState.Petrify);
-                        break;
-                    }
                     ChangeState(CharacterState.Idle);
                     break;
                 }
-                if (canFly && (isDie || isPetrify))
+                if (canFly && isDie)
                 {
                     velocity.y += extraFallGravity * Time.deltaTime;
                     rb.velocity = velocity;
@@ -610,9 +605,6 @@ public class Demonic : MoveCharacter
                     }
                 }
                 break;
-            case CharacterState.Petrify:
-                if (hp <= 0) ChangeState(CharacterState.Die);
-                break;
             case CharacterState.HitStun:
                 hitFeedbackSystem.HitStunUpdate();
                 break;
@@ -709,10 +701,6 @@ public class Demonic : MoveCharacter
                 state = hitFeedbackSystem.curCharacterState;
                 ChangeState(newState);
                 return;
-            case CharacterState.Petrify:
-                ani.speed = 1;
-                beHitTrigger.ChangeRenderState(RenderState.Normal);
-                break;
             default:
                 break;
         }
@@ -748,29 +736,7 @@ public class Demonic : MoveCharacter
                 break;
             case CharacterState.Attack:
                 break;
-            case CharacterState.Die:
-                if (!isPetrify)
-                {
-                    if(GameManager.instance.isRockEnable)
-                    {
-                        int randomInt = Random.Range(0, 100);
-                        if(randomInt < GameManager.instance.rockProbability)
-                        {
-                            isPetrify = true;
-                            if (canFly)
-                            {
-                                rb.constraints = RigidbodyConstraints.FreezeRotation | RigidbodyConstraints.FreezePositionZ;
-                                rb.velocity = Vector3.zero;
-                                ChangeState(CharacterState.Fall);
-                            }
-                            else
-                            {
-                                ChangeState(CharacterState.Petrify);
-                            }
-                            break;
-                        }
-                    }                
-                }
+            case CharacterState.Die:           
                 if (canFly)
                 {
                     if (isDie)
@@ -827,11 +793,6 @@ public class Demonic : MoveCharacter
                 ani.Play(AnimatorHash.ANIMATOR_walk, 0, 0);
                 //FaceToEneTower();
                 break;
-            case CharacterState.Petrify:
-                ani.speed = 0;
-                beHitTrigger.ChangeRenderState(RenderState.Petrify);
-                hp = (int)(totalHp * GameManager.instance.stoneHpRadio);
-                break;
             default:
                 break;
         }

+ 81 - 28
ActionTowerDefense/Assets/Scripts/Characters/Enemy.cs

@@ -494,34 +494,57 @@ public class Enemy : MoveCharacter
                 }
                 break;
             case CharacterState.Die:
-                dieKeepTime -= Time.deltaTime;
-                if (dieKeepTime <= 0)
-                {
-                    if (killer!=null && killer.GetComponent<Demonic>())
-                    {
-                        SoldierType st = killer.GetComponent<Demonic>().soldierType;
-                        SoldierEXP.expInstance.AddEXP(st, (int)(exp * LevelSelect.EXPRatio + 0.5f));
-                    }
-                    if (dieEffect)
-                    {
-                        PoolManager.Instantiate(dieEffect, transform.position);
-                    }
-                    GameManager gameManager = GameManager.instance;
-                    if (gameManager.gameType == GameType.GameEnd)
-                    {
-                        GameObject fx = PoolManager.Instantiate(gameManager.dropGoldFX);
-                        fx.transform.position = transform.position;
-                        GameObject injuryNum =  PoolManager.Instantiate(gameManager.dropGoldText);
-                        injuryNum.transform.position = new Vector3(
-                            transform.position.x + injuryNumPos_march.x + Random.Range(-injuryNumRandom_march.x / 2f, injuryNumRandom_march.x / 2f),
-                            transform.position.y + injuryNumPos_march.y + Random.Range(-injuryNumRandom_march.y / 2f, injuryNumRandom_march.y / 2f),
-                            transform.position.z);
-                        TextMeshProUGUI text = injuryNum.GetComponentInChildren<TextMeshProUGUI>();
-                        text.text = $"+{gameManager.enemyGoldDrop}";
-                    }
-                    gameObject.SetActive(false);
-                    break;
-                }
+                //if (killer != null && killer.GetComponent<Demonic>())
+                //{
+                //    SoldierType st = killer.GetComponent<Demonic>().soldierType;
+                //    SoldierEXP.expInstance.AddEXP(st, (int)(exp * LevelSelect.EXPRatio + 0.5f));
+                //}
+                //if (dieEffect)
+                //{
+                //    PoolManager.Instantiate(dieEffect, transform.position);
+                //}
+                //GameManager gameManager = GameManager.instance;
+                //if (gameManager.gameType == GameType.GameEnd)
+                //{
+                //    GameObject fx = PoolManager.Instantiate(gameManager.dropGoldFX);
+                //    fx.transform.position = transform.position;
+                //    GameObject injuryNum = PoolManager.Instantiate(gameManager.dropGoldText);
+                //    injuryNum.transform.position = new Vector3(
+                //        transform.position.x + injuryNumPos_march.x + Random.Range(-injuryNumRandom_march.x / 2f, injuryNumRandom_march.x / 2f),
+                //        transform.position.y + injuryNumPos_march.y + Random.Range(-injuryNumRandom_march.y / 2f, injuryNumRandom_march.y / 2f),
+                //        transform.position.z);
+                //    TextMeshProUGUI text = injuryNum.GetComponentInChildren<TextMeshProUGUI>();
+                //    text.text = $"+{gameManager.enemyGoldDrop}";
+                //}
+                gameObject.SetActive(false);
+                //dieKeepTime -= Time.deltaTime;
+                //if (dieKeepTime <= 0)
+                //{ 
+                //    if (killer!=null && killer.GetComponent<Demonic>())
+                //    {
+                //        SoldierType st = killer.GetComponent<Demonic>().soldierType;
+                //        SoldierEXP.expInstance.AddEXP(st, (int)(exp * LevelSelect.EXPRatio + 0.5f));
+                //    }
+                //    if (dieEffect)
+                //    {
+                //        PoolManager.Instantiate(dieEffect, transform.position);
+                //    }
+                //    GameManager gameManager = GameManager.instance;
+                //    if (gameManager.gameType == GameType.GameEnd)
+                //    {
+                //        GameObject fx = PoolManager.Instantiate(gameManager.dropGoldFX);
+                //        fx.transform.position = transform.position;
+                //        GameObject injuryNum =  PoolManager.Instantiate(gameManager.dropGoldText);
+                //        injuryNum.transform.position = new Vector3(
+                //            transform.position.x + injuryNumPos_march.x + Random.Range(-injuryNumRandom_march.x / 2f, injuryNumRandom_march.x / 2f),
+                //            transform.position.y + injuryNumPos_march.y + Random.Range(-injuryNumRandom_march.y / 2f, injuryNumRandom_march.y / 2f),
+                //            transform.position.z);
+                //        TextMeshProUGUI text = injuryNum.GetComponentInChildren<TextMeshProUGUI>();
+                //        text.text = $"+{gameManager.enemyGoldDrop}";
+                //    }
+                //    gameObject.SetActive(false);
+                //    break;
+                //}
                 break;
             case CharacterState.HitStun:
                 hitFeedbackSystem.HitStunUpdate();
@@ -622,6 +645,36 @@ public class Enemy : MoveCharacter
                 {
                     DropSouls();
                 }
+                if (killer != null && killer.GetComponent<Demonic>())
+                {
+                    SoldierType st = killer.GetComponent<Demonic>().soldierType;
+                    SoldierEXP.expInstance.AddEXP(st, (int)(exp * LevelSelect.EXPRatio + 0.5f));
+                }
+                if (dieEffect)
+                {
+                    PoolManager.Instantiate(dieEffect, transform.position);
+                }
+                GameManager gameManager = GameManager.instance;
+                if (gameManager.gameType == GameType.GameEnd)
+                {
+                    GameObject fx = PoolManager.Instantiate(gameManager.dropGoldFX);
+                    fx.transform.position = transform.position;
+                    GameObject injuryNum = PoolManager.Instantiate(gameManager.dropGoldText);
+                    injuryNum.transform.position = new Vector3(
+                        transform.position.x + injuryNumPos_march.x + Random.Range(-injuryNumRandom_march.x / 2f, injuryNumRandom_march.x / 2f),
+                        transform.position.y + injuryNumPos_march.y + Random.Range(-injuryNumRandom_march.y / 2f, injuryNumRandom_march.y / 2f),
+                        transform.position.z);
+                    TextMeshProUGUI text = injuryNum.GetComponentInChildren<TextMeshProUGUI>();
+                    text.text = $"+{gameManager.enemyGoldDrop}";
+                }
+                if (GameManager.instance.isRockEnable)
+                {
+                    int randomInt = Random.Range(0, 100);
+                    if (randomInt < GameManager.instance.rockProbability)
+                    {
+                        PoolManager.Instantiate(Resources.Load<GameObject>("Prefab/StoneStatue"), transform.position);
+                    }
+                }
                 break;
             default:
                 break;

+ 0 - 9
ActionTowerDefense/Assets/Scripts/Characters/MoveCharacter.cs

@@ -101,12 +101,6 @@ public class MoveCharacter : Character
     private float electrifyTimer;
     private GameObject electrifyEffect;
 
-    [Header("ʯ»¯Ð§¹û")]
-    public bool isPetrify = false;
-    public float petrifyTime;
-    private float petrifyTimer;
-    public int petrifyHp;
-
     [Header("ׯÉÕЧ¹û")]
     public bool isOnFire = false;
     public int fireStacks;
@@ -137,7 +131,6 @@ public class MoveCharacter : Character
         mecanim.transform.localPosition = Vector3.zero;
         mecanim.transform.localRotation = Quaternion.Euler(Vector3.zero);
         platformRotZ = 0;
-        isPetrify = false;
         isFrozen = false;
         if (fireEffect != null) fireEffect.SetActive(false);
         if (electrifyEffect != null) electrifyEffect.SetActive(false);
@@ -302,7 +295,6 @@ public class MoveCharacter : Character
         uiHp.Show(hp, totalHp);
         if (hp <= 0)
         {
-            if (isPetrify) return;
             hitFeedbackSystem.curCharacterState = CharacterState.Die;
             ChangeState(CharacterState.Die);
         }
@@ -444,7 +436,6 @@ public class MoveCharacter : Character
         uiHp.Show(hp, totalHp);
         if (hp <= 0)
         {
-            if (isPetrify) return;
             killer = attackFrom;
             hitFeedbackSystem.curCharacterState = CharacterState.Die;
             ChangeState(CharacterState.Die);

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

@@ -1598,13 +1598,13 @@ public class PlayerController : MoveCharacter
             attackInfo.criticalChance = gameManager.criticalChance;
             attackInfo.lifesteal = gameManager.lifesteal;
         }
-        if ((GameManager.instance.isSkyEnable && demonic.canFly))
+        if (GameManager.instance.isSkyEnable)
         {
             for (int i = 0; i < attackController.attackMethod_summon.Length; i++)
             {
                 AttackInfo attackInfo = attackController.attackMethod_summon[i].attackInfo;
                 attackInfo.damage += (int)(attackInfo.damage * demonicDic[0].Count * GameManager.instance.attackRate);
-                Debug.Log("飞行兵的数量是:" + demonicDic[0].Count + ",增加的伤害为" + (int)(demonicDic[0].Count * GameManager.instance.attackRate));
+                Debug.Log("飞行兵的数量是:" + demonicDic[0].Count + ",增加的伤害为" + (int)(attackInfo.damage * demonicDic[0].Count * GameManager.instance.attackRate));
             }
             for (int i = 0; i < attackController.attackMethod_march.Length; i++)
             {
@@ -1612,13 +1612,13 @@ public class PlayerController : MoveCharacter
                 attackInfo.damage += (int)(attackInfo.damage * demonicDic[0].Count * GameManager.instance.attackRate);
             }        
         }
-        else if (GameManager.instance.isGroundEnable && !demonic.canFly)
+        else if (GameManager.instance.isGroundEnable)
         {
             int num = demonicDic[1].Count + demonicDic[2].Count;
-            demonic.totalHp += (int)(num * GameManager.instance.hpRate);
+            Debug.Log("地面兵的数量是:" + num + ",增加的血量为" + (int)(demonic.totalHp * num * GameManager.instance.hpRate));
+            demonic.totalHp += (int)(demonic.totalHp * num * GameManager.instance.hpRate);
             demonic.hp = demonic.totalHp;
             demonic.uiHp.Show(demonic.hp, demonic.totalHp);
-            Debug.Log("地面兵的数量是:" + num + ",增加的血量为" + (int)(num * GameManager.instance.hpRate));
         }
         demonic.attributeStatus.resistances.armor = gameManager.armor;
         demonic.attributeStatus.resistances.dodge = gameManager.dodge;

+ 137 - 0
ActionTowerDefense/Assets/Scripts/Characters/StoneStatue.cs

@@ -0,0 +1,137 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using Sirenix.OdinInspector;
+
+public class StoneStatue:MonoBehaviour
+{
+    public GameObject bulletPrefab;
+    public GameObject parent;
+    private AttackController ac;
+
+    [Header("子弹发射设置,子弹参数在AttackControlller的行军式中设置")]
+    [LabelText("子弹数量")] public int bulletCount = 3;                   
+    [LabelText("基础速度")] public float baseSpeed = 10f;                  
+    [LabelText("速度随机范围")] public float speedRandomRange = 2f;           
+    [LabelText("角度随机范围")] public float angleRandomRange = 5f;        
+
+    [Header("向左发射角度")]
+    [LabelText("向左发射的基础角度")] public float leftBaseAngle = 135f;       
+    [LabelText("向左发射的角度范围")] public float leftAngleRange = 60f;        
+    
+    [Header("向右发射角度")]
+    [LabelText("向右发射的基础角度")] public float rightBaseAngle = 45f;     
+    [LabelText("向右发射的角度范围")] public float rightAngleRange = 60f;
+
+    private void Awake()
+    {
+        ac = GetComponent<AttackController>();
+    }
+
+    private void OnTriggerEnter(Collider other)
+    {
+        if (other.gameObject.layer == 20)
+        {
+            AttackTrigger attackTrigger = other.gameObject.GetComponent<AttackTrigger>();
+            if(attackTrigger != null)
+            {
+                AttackController.AttackMethod attackMethod = other.gameObject.GetComponent<AttackTrigger>().attackMethod;
+
+                AttackInfo attackInfo = attackMethod.attackInfo;
+                Character attackFrom = attackTrigger.owner;
+
+                if ((attackFrom.CompareTag("Demonic") || attackFrom.CompareTag("Player")) && attackInfo.attackMethod_Type == AttackMethod_Type.Attack_Summon)
+                {
+                    foreach (AttackEffect attackEffect in attackInfo.attackEffect)
+                    {
+                        if (attackEffect == AttackEffect.BlowUp)
+                        {
+                            Vector3 vec3 = attackMethod.attackInfo.blowUp.dir;
+                            int attackDir = 0;
+                            switch (attackMethod.attackInfo.blowUp.directionType)
+                            {
+                                case AttackInfo.BlowUp.DirectionType.Common:
+                                    attackDir = attackFrom.bodyTrans.localScale.x < 0 ? -1 : 1;
+                                    break;
+                                case AttackInfo.BlowUp.DirectionType.Spread:
+                                    attackDir = attackFrom.transform.position.x < transform.position.x ? -1 : 1;
+                                    break;
+                            }
+                            if (attackDir < 0)
+                            {
+                                vec3.x = -vec3.x;
+                            }
+                            Shoot(vec3, attackFrom);
+                        }
+                    }
+                }
+            }
+            
+        }
+    }
+
+    private void Shoot(Vector3 attackDir,Character attackFrom)
+    {
+        if (bulletPrefab == null)
+        {
+            Debug.LogError("bulletPrefab未设置!");
+            return;
+        }
+        // 判断攻击方向(向左还是向右)
+        bool isAttackingRight = attackDir.x > 0;
+
+        // 根据方向选择发射角度范围
+        float baseAngle = isAttackingRight ? rightBaseAngle : leftBaseAngle;
+        float angleRange = isAttackingRight ? rightAngleRange : leftAngleRange;
+
+        // 计算角度步长(均匀分布)
+        float angleStep = angleRange / (bulletCount - 1);
+        float startAngle = baseAngle - angleRange / 2f;
+
+        for (int i = 0; i < bulletCount; i++)
+        {
+            // 计算基础角度(均匀分布)
+            float currentAngle = startAngle + angleStep * i;
+
+            // 添加随机角度偏移
+            float randomAngleOffset = Random.Range(-angleRandomRange, angleRandomRange);
+            float finalAngle = currentAngle + randomAngleOffset;
+
+            // 计算方向向量
+            float rad = finalAngle * Mathf.Deg2Rad;
+            Vector3 bulletDirection = new Vector3(Mathf.Cos(rad), Mathf.Sin(rad), 0f);
+
+            // 计算随机速度
+            float randomSpeed = baseSpeed + Random.Range(-speedRandomRange, speedRandomRange);
+            Vector3 bulletVelocity = bulletDirection * randomSpeed;
+
+            // 创建子弹
+            CreateBullet(bulletDirection, bulletVelocity, attackFrom);
+
+            parent.SetActive(false);
+        }
+    }
+
+    private void CreateBullet(Vector3 direction, Vector3 velocity,Character attackFrom)
+    {
+        GameObject bulletObj = PoolManager.Instantiate(bulletPrefab, transform.position + Vector3.up * 2, Quaternion.identity);
+
+        // 设置子弹朝向
+        bulletObj.transform.right = direction;
+
+        // 获取子弹组件并设置属性
+        Bullet bullet = bulletObj.GetComponent<Bullet>();
+        if (bullet != null)
+        {
+            bullet.BeShoot(attackFrom, transform.position, direction,false,false,null, ac.attackMethod_march[0]);
+        }
+
+        //Debug.Log($"发射子弹,方向:{direction},速度:{velocity.magnitude}");
+    }
+
+
+    //public override void Init()
+    //{
+    //    base.Init();
+    //}
+}

+ 11 - 0
ActionTowerDefense/Assets/Scripts/Characters/StoneStatue.cs.meta

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

+ 1 - 1
ActionTowerDefense/Assets/Scripts/GameManager.cs

@@ -101,7 +101,7 @@ public class GameManager : MonoBehaviour
 
     [FoldoutGroup("标签/岩")] [LabelText("是否启用")] public bool isRockEnable = false;
     [FoldoutGroup("标签/岩")] [LabelText("触发概率")] [PropertyRange(0, 100)] public int rockProbability = 100;
-    [FoldoutGroup("标签/岩")] [LabelText("石像生命值占总生命比值")] public float stoneHpRadio = 1;
+    [FoldoutGroup("标签/岩")] [LabelText("石像预制体")] public GameObject stoneStatuePrefab;
 
     [FoldoutGroup("标签/天")] [LabelText("是否启用")] public bool isSkyEnable = false;
     [FoldoutGroup("标签/天")] [LabelText("每个兵提供的攻击buff比率")] public float attackRate = 0.01f;