Kaynağa Gözat

滚石怪最终版上传

GrainFull 1 ay önce
ebeveyn
işleme
35b6ac949f

+ 56 - 25
ActionTowerDefense/Assets/Resources/Prefab/Enemy/Enemy_HugeRockRoller.prefab

@@ -77,8 +77,8 @@ BoxCollider:
   m_IsTrigger: 1
   m_Enabled: 1
   serializedVersion: 2
-  m_Size: {x: 1.1805923, y: 3.5820045, z: 2}
-  m_Center: {x: 1.197003, y: 1.6960022, z: 0}
+  m_Size: {x: 2.5223784, y: 4.3389077, z: 2}
+  m_Center: {x: 0.52611125, y: 2.0744548, z: 0}
 --- !u!114 &7494721769656590307
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -164,21 +164,26 @@ MonoBehaviour:
     shootTrack: 0
     shootAlwaysTrack: 0
     skill: {fileID: 0}
+    additionalEffects: 0
   force: {x: 0, y: 0, z: 0}
   changeHurt: 0
   repelValue: 0
   offsetY: 1
   hitRate: 1
+  isCreatedByDemonicSummon: 0
   fatName: "\u76FE\u7532\u5175"
   rockRoller: {fileID: 5440846222648032759}
-  impactRockForcDriction: {x: -1, y: 0.5, z: 0}
-  impactFatForcDriction: {x: 1, y: 0.5, z: 0}
+  impactRockForcDriction: {x: -1, y: 1, z: 0}
+  impactFatForcDriction: {x: 1, y: 1, z: 0}
   fatForceMul: 250
   rockForceMul: 90
+  collisionStopDuration: 0.2
+  curStopTime: 0
   attcakFat: []
   attcakedFat: []
   attackFatNumber: 5
   damageMultiple: 10
+  rockCollisionProtect: 0
 --- !u!1 &2353298311948367420
 GameObject:
   m_ObjectHideFlags: 0
@@ -249,8 +254,8 @@ SpriteRenderer:
   m_AutoUVMaxDistance: 0.5
   m_AutoUVMaxAngle: 89
   m_LightmapParameters: {fileID: 0}
-  m_SortingLayerID: 21624701
-  m_SortingLayer: 5
+  m_SortingLayerID: -1730265859
+  m_SortingLayer: 4
   m_SortingOrder: -100
   m_Sprite: {fileID: 21300000, guid: c1a1c886a1a9d0444844a1835f067d94, type: 3}
   m_Color: {r: 1, g: 1, b: 1, a: 1}
@@ -390,6 +395,7 @@ MonoBehaviour:
     shootTrack: 0
     shootAlwaysTrack: 0
     skill: {fileID: 0}
+    additionalEffects: 0
   attributeTime: 0
   floatingState: 0
   hitState: 0
@@ -405,7 +411,7 @@ MonoBehaviour:
   haveVulnerable: 0
   vulnerableTime: 0
   stackingWoudsTime: 0
-  stackingWordsNum: 0
+  stackingWords: 0
   resistances:
     controlOrder: 0
     Float: 0
@@ -497,6 +503,7 @@ MonoBehaviour:
     shootTrack: 0
     shootAlwaysTrack: 0
     skill: {fileID: 0}
+    additionalEffects: 0
   attackFromData: {fileID: 0}
   hitStunTime: 0
   canHitStun: 0
@@ -652,21 +659,26 @@ MonoBehaviour:
     shootTrack: 0
     shootAlwaysTrack: 0
     skill: {fileID: 0}
+    additionalEffects: 0
   force: {x: 0, y: 0, z: 0}
   changeHurt: 0
   repelValue: 0
   offsetY: 1
   hitRate: 1
+  isCreatedByDemonicSummon: 0
   fatName: "\u76FE\u7532\u5175"
   rockRoller: {fileID: 5440846222648032759}
   impactRockForcDriction: {x: -1, y: 0.2, z: 0}
   impactFatForcDriction: {x: 1, y: 0.2, z: 0}
   fatForceMul: 100
   rockForceMul: 100
+  collisionStopDuration: 0.2
+  curStopTime: 0
   attcakFat: []
   attcakedFat: []
   attackFatNumber: 1
   damageMultiple: 10
+  rockCollisionProtect: 0
 --- !u!1 &4480734502875862885
 GameObject:
   m_ObjectHideFlags: 0
@@ -1032,6 +1044,7 @@ MonoBehaviour:
     shootTrack: 0
     shootAlwaysTrack: 0
     skill: {fileID: 0}
+    additionalEffects: 0
   attackMethod_march:
   - attackName: attack_march
     attackType: 0
@@ -1098,6 +1111,7 @@ MonoBehaviour:
     shootTrack: 0
     shootAlwaysTrack: 0
     skill: {fileID: 0}
+    additionalEffects: 0
   curAttackMethod:
     attackName: 
     attackType: 0
@@ -1164,6 +1178,7 @@ MonoBehaviour:
     shootTrack: 0
     shootAlwaysTrack: 0
     skill: {fileID: 0}
+    additionalEffects: 0
   attackKeys:
   - aniName: attack_march
     keys:
@@ -1216,7 +1231,7 @@ MonoBehaviour:
   meshRenderer: {fileID: 0}
   ani: {fileID: 3333436509305836838}
   totalDieKeepTime: 1
-  showInjuryNum: 0
+  showInjuryNum: 1
   injuryNumText: {fileID: 6467251191553420251, guid: 9b37289f93ea76745ab2cefb79a93e3c, type: 3}
   injuryNumTextSummon: {fileID: 6467251191553420251, guid: 71b4c570c9e403d429846b71878a20c4, type: 3}
   injuryNumPos_summon: {x: 1, y: 3}
@@ -1263,6 +1278,12 @@ MonoBehaviour:
   platformRotZ: 0
   RotLerpSpeed: 0.6
   RotLerpTime: 0
+  needToAdjustFlyHeight: 0
+  flyHeight: 0
+  maxFlyHeight: 0
+  minFlyHeight: 0
+  flyUpTime: 0
+  isAdjustHeight: 0
   matState: 1
   spinee: {fileID: 0}
   mesh: {fileID: 0}
@@ -1270,12 +1291,6 @@ MonoBehaviour:
   outlineMats: []
   outline1Mats: []
   moveSpeed: 2
-  needToAdjustFlyHeight: 0
-  flyHeight: 0
-  maxFlyHeight: 0
-  minFlyHeight: 0
-  flyUpTime: 0
-  isAdjustHeight: 0
   isDamageReduction: 0
   reductionDegree: 0
   reductionEffect: {fileID: 0}
@@ -1293,6 +1308,8 @@ MonoBehaviour:
   sustainedInjury_damage: 0
   heavyDamage: 0
   killer: {fileID: 0}
+  isFrozen: 0
+  frozenTime: 0
   exp: 10
   tag: 2
   dieEffect: {fileID: 417478504669294145, guid: 2a4e7e280b9d19042ba0f57ae5edf736, type: 3}
@@ -1323,12 +1340,18 @@ MonoBehaviour:
   attackEnemyTrigger0: {fileID: 3394333386830084064}
   initialTargetTypes: 
   stone: {fileID: 2353298311948367420}
-  smallStone: Enemy_RockRoller
+  smallStoneE: Enemy_RockRoller
+  smallStoneC: "\u6EDA\u77F3\u602A"
   baseRotateSpeed: 70
   rotateMul: 1.1
+  rotateDirection: -1
   owner: {fileID: 389370483430162252}
-  gatherTime: 0.8
-  weakTime: 0.8
+  isGather: 0
+  gatherTime: 3
+  gatherTimer: 0
+  isWeak: 0
+  weakTime: 3
+  weakTimer: 0
   addForce: 1
   RockSpriterRenderer: {fileID: 5963238826951358188}
   spriteList:
@@ -1347,6 +1370,14 @@ MonoBehaviour:
   effectDestroyDelay: 2
   smoke: {fileID: 5776004700691195845}
   smallStoneFoece: 30
+  isBounce: 0
+  isLeft: 0
+  bounceTime: 2
+  curBounceTime: 0
+  forceLeftDirection: {x: -1, y: 2, z: 0}
+  forceRightDirection: {x: 0, y: 0, z: 0}
+  decrease: 0.5
+  forceMul: 20
 --- !u!1 &6139679835290116115
 GameObject:
   m_ObjectHideFlags: 0
@@ -1364,7 +1395,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 0
+  m_IsActive: 1
 --- !u!4 &770599430276839403
 Transform:
   m_ObjectHideFlags: 0
@@ -1373,7 +1404,7 @@ Transform:
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 6139679835290116115}
   m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
-  m_LocalPosition: {x: -0.0037123, y: -0.00999999, z: 0}
+  m_LocalPosition: {x: 6.28, y: -0.00999999, z: 0}
   m_LocalScale: {x: 0.81438, y: 0.81438, z: 0.81438}
   m_ConstrainProportionsScale: 0
   m_Children: []
@@ -1413,8 +1444,8 @@ BoxCollider:
   m_IsTrigger: 1
   m_Enabled: 1
   serializedVersion: 2
-  m_Size: {x: 20, y: 4.0305195, z: 20}
-  m_Center: {x: 0, y: 1.9752598, z: 0}
+  m_Size: {x: 9.779811, y: 4.0305195, z: 20.000002}
+  m_Center: {x: -5.110107, y: 1.9752598, z: 0}
 --- !u!1 &6239053045979137450
 GameObject:
   m_ObjectHideFlags: 0
@@ -1543,7 +1574,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 0
+  m_IsActive: 1
 --- !u!4 &3262389902459024245
 Transform:
   m_ObjectHideFlags: 0
@@ -1574,7 +1605,7 @@ MeshRenderer:
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 7208291223413765209}
-  m_Enabled: 1
+  m_Enabled: 0
   m_CastShadows: 1
   m_ReceiveShadows: 1
   m_DynamicOccludee: 1
@@ -1670,8 +1701,8 @@ MonoBehaviour:
   translator:
     autoReset: 1
     useCustomMixMode: 1
-    layerMixModes: 01000000
-    layerBlendModes: 01000000
+    layerMixModes: 0100000001000000
+    layerBlendModes: 0100000002000000
   updateTiming: 1
 --- !u!1 &7400038499920823785
 GameObject:

+ 59 - 28
ActionTowerDefense/Assets/Resources/Prefab/Enemy/Enemy_RockRoller.prefab

@@ -77,8 +77,8 @@ BoxCollider:
   m_IsTrigger: 1
   m_Enabled: 1
   serializedVersion: 2
-  m_Size: {x: 1.1805923, y: 3.5820045, z: 2}
-  m_Center: {x: 1.197003, y: 1.6960022, z: 0}
+  m_Size: {x: 2.3813019, y: 4.4197083, z: 2}
+  m_Center: {x: 0.5966485, y: 2.1148546, z: 0}
 --- !u!114 &7494721769656590307
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -164,21 +164,26 @@ MonoBehaviour:
     shootTrack: 0
     shootAlwaysTrack: 0
     skill: {fileID: 0}
+    additionalEffects: 0
   force: {x: 0, y: 0, z: 0}
   changeHurt: 0
   repelValue: 0
   offsetY: 1
   hitRate: 1
+  isCreatedByDemonicSummon: 0
   fatName: "\u76FE\u7532\u5175"
   rockRoller: {fileID: 5440846222648032759}
-  impactRockForcDriction: {x: -1, y: 0.5, z: 0}
-  impactFatForcDriction: {x: 1, y: 0.5, z: 0}
+  impactRockForcDriction: {x: -1, y: 1, z: 0}
+  impactFatForcDriction: {x: 1, y: 1, z: 0}
   fatForceMul: 250
   rockForceMul: 80
+  collisionStopDuration: 0.2
+  curStopTime: 0
   attcakFat: []
   attcakedFat: []
-  attackFatNumber: 2
+  attackFatNumber: 3
   damageMultiple: 10
+  rockCollisionProtect: 0
 --- !u!1 &2353298311948367420
 GameObject:
   m_ObjectHideFlags: 0
@@ -249,9 +254,9 @@ SpriteRenderer:
   m_AutoUVMaxDistance: 0.5
   m_AutoUVMaxAngle: 89
   m_LightmapParameters: {fileID: 0}
-  m_SortingLayerID: 21624701
-  m_SortingLayer: 5
-  m_SortingOrder: -100
+  m_SortingLayerID: -1730265859
+  m_SortingLayer: 4
+  m_SortingOrder: -99
   m_Sprite: {fileID: 21300000, guid: c1a1c886a1a9d0444844a1835f067d94, type: 3}
   m_Color: {r: 1, g: 1, b: 1, a: 1}
   m_FlipX: 0
@@ -390,6 +395,7 @@ MonoBehaviour:
     shootTrack: 0
     shootAlwaysTrack: 0
     skill: {fileID: 0}
+    additionalEffects: 0
   attributeTime: 0
   floatingState: 0
   hitState: 0
@@ -405,7 +411,7 @@ MonoBehaviour:
   haveVulnerable: 0
   vulnerableTime: 0
   stackingWoudsTime: 0
-  stackingWordsNum: 0
+  stackingWords: 0
   resistances:
     controlOrder: 0
     Float: 0
@@ -497,6 +503,7 @@ MonoBehaviour:
     shootTrack: 0
     shootAlwaysTrack: 0
     skill: {fileID: 0}
+    additionalEffects: 0
   attackFromData: {fileID: 0}
   hitStunTime: 0
   canHitStun: 0
@@ -652,21 +659,26 @@ MonoBehaviour:
     shootTrack: 0
     shootAlwaysTrack: 0
     skill: {fileID: 0}
+    additionalEffects: 0
   force: {x: 0, y: 0, z: 0}
   changeHurt: 0
   repelValue: 0
   offsetY: 1
   hitRate: 1
+  isCreatedByDemonicSummon: 0
   fatName: "\u76FE\u7532\u5175"
   rockRoller: {fileID: 5440846222648032759}
   impactRockForcDriction: {x: -1, y: 0.2, z: 0}
   impactFatForcDriction: {x: 1, y: 0.2, z: 0}
   fatForceMul: 100
   rockForceMul: 100
+  collisionStopDuration: 0.2
+  curStopTime: 0
   attcakFat: []
   attcakedFat: []
   attackFatNumber: 1
   damageMultiple: 10
+  rockCollisionProtect: 0
 --- !u!1 &4480734502875862885
 GameObject:
   m_ObjectHideFlags: 0
@@ -684,7 +696,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 0
+  m_IsActive: 1
 --- !u!4 &6207242290232856985
 Transform:
   m_ObjectHideFlags: 0
@@ -1032,6 +1044,7 @@ MonoBehaviour:
     shootTrack: 0
     shootAlwaysTrack: 0
     skill: {fileID: 0}
+    additionalEffects: 0
   attackMethod_march:
   - attackName: attack_march
     attackType: 0
@@ -1098,6 +1111,7 @@ MonoBehaviour:
     shootTrack: 0
     shootAlwaysTrack: 0
     skill: {fileID: 0}
+    additionalEffects: 0
   curAttackMethod:
     attackName: 
     attackType: 0
@@ -1164,6 +1178,7 @@ MonoBehaviour:
     shootTrack: 0
     shootAlwaysTrack: 0
     skill: {fileID: 0}
+    additionalEffects: 0
   attackKeys:
   - aniName: attack_march
     keys:
@@ -1216,7 +1231,7 @@ MonoBehaviour:
   meshRenderer: {fileID: 0}
   ani: {fileID: 3333436509305836838}
   totalDieKeepTime: 1
-  showInjuryNum: 0
+  showInjuryNum: 1
   injuryNumText: {fileID: 6467251191553420251, guid: 9b37289f93ea76745ab2cefb79a93e3c, type: 3}
   injuryNumTextSummon: {fileID: 6467251191553420251, guid: 71b4c570c9e403d429846b71878a20c4, type: 3}
   injuryNumPos_summon: {x: 1, y: 3}
@@ -1263,6 +1278,12 @@ MonoBehaviour:
   platformRotZ: 0
   RotLerpSpeed: 0.6
   RotLerpTime: 0
+  needToAdjustFlyHeight: 0
+  flyHeight: 0
+  maxFlyHeight: 0
+  minFlyHeight: 0
+  flyUpTime: 0
+  isAdjustHeight: 0
   matState: 1
   spinee: {fileID: 0}
   mesh: {fileID: 0}
@@ -1270,12 +1291,6 @@ MonoBehaviour:
   outlineMats: []
   outline1Mats: []
   moveSpeed: 2
-  needToAdjustFlyHeight: 0
-  flyHeight: 0
-  maxFlyHeight: 0
-  minFlyHeight: 0
-  flyUpTime: 0
-  isAdjustHeight: 0
   isDamageReduction: 0
   reductionDegree: 0
   reductionEffect: {fileID: 0}
@@ -1293,6 +1308,8 @@ MonoBehaviour:
   sustainedInjury_damage: 0
   heavyDamage: 0
   killer: {fileID: 0}
+  isFrozen: 0
+  frozenTime: 0
   exp: 10
   tag: 2
   dieEffect: {fileID: 417478504669294145, guid: 2a4e7e280b9d19042ba0f57ae5edf736, type: 3}
@@ -1323,12 +1340,18 @@ MonoBehaviour:
   attackEnemyTrigger0: {fileID: 3394333386830084064}
   initialTargetTypes: 
   stone: {fileID: 2353298311948367420}
-  smallStone: Enemy_SmallRockRoller
+  smallStoneE: Enemy_SmallRockRoller
+  smallStoneC: "\u5C0F\u6EDA\u77F3\u602A"
   baseRotateSpeed: 70
   rotateMul: 1.1
+  rotateDirection: -1
   owner: {fileID: 389370483430162252}
-  gatherTime: 1
-  weakTime: 1
+  isGather: 0
+  gatherTime: 3
+  gatherTimer: 0
+  isWeak: 0
+  weakTime: 3
+  weakTimer: 0
   addForce: 1
   RockSpriterRenderer: {fileID: 5963238826951358188}
   spriteList:
@@ -1345,6 +1368,14 @@ MonoBehaviour:
   effectDestroyDelay: 2
   smoke: {fileID: 819035234030810755}
   smallStoneFoece: 40
+  isBounce: 0
+  isLeft: 0
+  bounceTime: 3
+  curBounceTime: 0
+  forceLeftDirection: {x: -1, y: 2, z: 0}
+  forceRightDirection: {x: 1, y: 2, z: 0}
+  decrease: 0.5
+  forceMul: 25
 --- !u!1 &6139679835290116115
 GameObject:
   m_ObjectHideFlags: 0
@@ -1362,7 +1393,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 0
+  m_IsActive: 1
 --- !u!4 &770599430276839403
 Transform:
   m_ObjectHideFlags: 0
@@ -1371,7 +1402,7 @@ Transform:
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 6139679835290116115}
   m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
-  m_LocalPosition: {x: -0.0037123, y: -0.00999999, z: 0}
+  m_LocalPosition: {x: 6.3, y: -0.00999999, z: 0}
   m_LocalScale: {x: 0.81438, y: 0.81438, z: 0.81438}
   m_ConstrainProportionsScale: 0
   m_Children: []
@@ -1411,8 +1442,8 @@ BoxCollider:
   m_IsTrigger: 1
   m_Enabled: 1
   serializedVersion: 2
-  m_Size: {x: 20, y: 4.0305195, z: 20}
-  m_Center: {x: 0, y: 1.9752598, z: 0}
+  m_Size: {x: 11.00698, y: 4.0305195, z: 20}
+  m_Center: {x: -4.496525, y: 1.9752598, z: 0}
 --- !u!1 &6239053045979137450
 GameObject:
   m_ObjectHideFlags: 0
@@ -1541,7 +1572,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 0
+  m_IsActive: 1
 --- !u!4 &3262389902459024245
 Transform:
   m_ObjectHideFlags: 0
@@ -1572,7 +1603,7 @@ MeshRenderer:
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 7208291223413765209}
-  m_Enabled: 1
+  m_Enabled: 0
   m_CastShadows: 1
   m_ReceiveShadows: 1
   m_DynamicOccludee: 1
@@ -1668,8 +1699,8 @@ MonoBehaviour:
   translator:
     autoReset: 1
     useCustomMixMode: 1
-    layerMixModes: 01000000
-    layerBlendModes: 01000000
+    layerMixModes: 0100000001000000
+    layerBlendModes: 0100000002000000
   updateTiming: 1
 --- !u!1 &7400038499920823785
 GameObject:

+ 62 - 31
ActionTowerDefense/Assets/Resources/Prefab/Enemy/Enemy_SmallRockRoller.prefab

@@ -24,8 +24,8 @@ Transform:
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 650183981426157255}
   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
-  m_LocalPosition: {x: -0.0037123, y: -0.082, z: 0}
-  m_LocalScale: {x: 0.81438, y: 0.81438, z: 0.81438}
+  m_LocalPosition: {x: -0.002764, y: -0.12, z: 0}
+  m_LocalScale: {x: 0.95111436, y: 0.95111436, z: 0.95111436}
   m_ConstrainProportionsScale: 0
   m_Children:
   - {fileID: 3262389902459024245}
@@ -59,7 +59,7 @@ Transform:
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 1322232727721152541}
   m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
-  m_LocalPosition: {x: 0.65, y: 0, z: 0}
+  m_LocalPosition: {x: 4.76, y: 0.1, z: 0}
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_ConstrainProportionsScale: 1
   m_Children: []
@@ -77,8 +77,8 @@ BoxCollider:
   m_IsTrigger: 1
   m_Enabled: 1
   serializedVersion: 2
-  m_Size: {x: 0.74404943, y: 3.9082205, z: 1.9999996}
-  m_Center: {x: -2.4603748, y: 1.8591108, z: 0}
+  m_Size: {x: 2.6784804, y: 5.571832, z: 1.9999996}
+  m_Center: {x: -3.4275908, y: 2.6909158, z: 0}
 --- !u!114 &7494721769656590307
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -164,21 +164,26 @@ MonoBehaviour:
     shootTrack: 0
     shootAlwaysTrack: 0
     skill: {fileID: 0}
+    additionalEffects: 0
   force: {x: 0, y: 0, z: 0}
   changeHurt: 0
   repelValue: 0
   offsetY: 1
   hitRate: 1
+  isCreatedByDemonicSummon: 0
   fatName: "\u76FE\u7532\u5175"
   rockRoller: {fileID: 5440846222648032759}
-  impactRockForcDriction: {x: -1, y: 0.2, z: 0}
+  impactRockForcDriction: {x: -1, y: 1, z: 0}
   impactFatForcDriction: {x: 1, y: 0.2, z: 0}
   fatForceMul: 150
   rockForceMul: 90
+  collisionStopDuration: 0.2
+  curStopTime: 0
   attcakFat: []
   attcakedFat: []
   attackFatNumber: 1
   damageMultiple: 10
+  rockCollisionProtect: 0
 --- !u!1 &2460330936527559963
 GameObject:
   m_ObjectHideFlags: 0
@@ -306,6 +311,7 @@ MonoBehaviour:
     shootTrack: 0
     shootAlwaysTrack: 0
     skill: {fileID: 0}
+    additionalEffects: 0
   attributeTime: 0
   floatingState: 0
   hitState: 0
@@ -321,7 +327,7 @@ MonoBehaviour:
   haveVulnerable: 0
   vulnerableTime: 0
   stackingWoudsTime: 0
-  stackingWordsNum: 0
+  stackingWords: 0
   resistances:
     controlOrder: 0
     Float: 0
@@ -413,6 +419,7 @@ MonoBehaviour:
     shootTrack: 0
     shootAlwaysTrack: 0
     skill: {fileID: 0}
+    additionalEffects: 0
   attackFromData: {fileID: 0}
   hitStunTime: 0
   canHitStun: 0
@@ -507,9 +514,9 @@ SpriteRenderer:
   m_AutoUVMaxDistance: 0.5
   m_AutoUVMaxAngle: 89
   m_LightmapParameters: {fileID: 0}
-  m_SortingLayerID: 21624701
-  m_SortingLayer: 5
-  m_SortingOrder: -100
+  m_SortingLayerID: -1730265859
+  m_SortingLayer: 4
+  m_SortingOrder: -98
   m_Sprite: {fileID: 21300000, guid: c1a1c886a1a9d0444844a1835f067d94, type: 3}
   m_Color: {r: 1, g: 1, b: 1, a: 1}
   m_FlipX: 0
@@ -652,21 +659,26 @@ MonoBehaviour:
     shootTrack: 0
     shootAlwaysTrack: 0
     skill: {fileID: 0}
+    additionalEffects: 0
   force: {x: 0, y: 0, z: 0}
   changeHurt: 0
   repelValue: 0
   offsetY: 1
   hitRate: 1
+  isCreatedByDemonicSummon: 0
   fatName: "\u76FE\u7532\u5175"
   rockRoller: {fileID: 0}
   impactRockForcDriction: {x: -1, y: 0.2, z: 0}
   impactFatForcDriction: {x: 1, y: 0.2, z: 0}
   fatForceMul: 100
   rockForceMul: 100
+  collisionStopDuration: 0.2
+  curStopTime: 0
   attcakFat: []
   attcakedFat: []
   attackFatNumber: 1
   damageMultiple: 10
+  rockCollisionProtect: 0
 --- !u!1 &4480734502875862885
 GameObject:
   m_ObjectHideFlags: 0
@@ -684,7 +696,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 0
+  m_IsActive: 1
 --- !u!4 &6207242290232856985
 Transform:
   m_ObjectHideFlags: 0
@@ -855,7 +867,7 @@ Transform:
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 5440846222604650419}
   m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
-  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalPosition: {x: 0, y: -0.07, z: 0}
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_ConstrainProportionsScale: 0
   m_Children: []
@@ -939,7 +951,7 @@ Rigidbody:
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 5440846222648032759}
   serializedVersion: 2
-  m_Mass: 6
+  m_Mass: 5
   m_Drag: 0
   m_AngularDrag: 0.05
   m_UseGravity: 1
@@ -1032,6 +1044,7 @@ MonoBehaviour:
     shootTrack: 0
     shootAlwaysTrack: 0
     skill: {fileID: 0}
+    additionalEffects: 0
   attackMethod_march:
   - attackName: attack_march
     attackType: 0
@@ -1098,6 +1111,7 @@ MonoBehaviour:
     shootTrack: 0
     shootAlwaysTrack: 0
     skill: {fileID: 0}
+    additionalEffects: 0
   curAttackMethod:
     attackName: 
     attackType: 0
@@ -1164,6 +1178,7 @@ MonoBehaviour:
     shootTrack: 0
     shootAlwaysTrack: 0
     skill: {fileID: 0}
+    additionalEffects: 0
   attackKeys:
   - aniName: attack_march
     keys:
@@ -1216,7 +1231,7 @@ MonoBehaviour:
   meshRenderer: {fileID: 0}
   ani: {fileID: 3333436509305836838}
   totalDieKeepTime: 1
-  showInjuryNum: 0
+  showInjuryNum: 1
   injuryNumText: {fileID: 6467251191553420251, guid: 9b37289f93ea76745ab2cefb79a93e3c, type: 3}
   injuryNumTextSummon: {fileID: 6467251191553420251, guid: 71b4c570c9e403d429846b71878a20c4, type: 3}
   injuryNumPos_summon: {x: 1, y: 3}
@@ -1263,6 +1278,12 @@ MonoBehaviour:
   platformRotZ: 0
   RotLerpSpeed: 0.6
   RotLerpTime: 0
+  needToAdjustFlyHeight: 0
+  flyHeight: 0
+  maxFlyHeight: 0
+  minFlyHeight: 0
+  flyUpTime: 0
+  isAdjustHeight: 0
   matState: 1
   spinee: {fileID: 0}
   mesh: {fileID: 0}
@@ -1270,12 +1291,6 @@ MonoBehaviour:
   outlineMats: []
   outline1Mats: []
   moveSpeed: 2
-  needToAdjustFlyHeight: 0
-  flyHeight: 0
-  maxFlyHeight: 0
-  minFlyHeight: 0
-  flyUpTime: 0
-  isAdjustHeight: 0
   isDamageReduction: 0
   reductionDegree: 0
   reductionEffect: {fileID: 0}
@@ -1293,6 +1308,8 @@ MonoBehaviour:
   sustainedInjury_damage: 0
   heavyDamage: 0
   killer: {fileID: 0}
+  isFrozen: 0
+  frozenTime: 0
   exp: 10
   tag: 2
   dieEffect: {fileID: 417478504669294145, guid: 2a4e7e280b9d19042ba0f57ae5edf736, type: 3}
@@ -1323,12 +1340,18 @@ MonoBehaviour:
   attackEnemyTrigger0: {fileID: 3394333386830084064}
   initialTargetTypes: 
   stone: {fileID: 3168192831983976468}
-  smallStone: Enemy_RockRoller
+  smallStoneE: 
+  smallStoneC: 
   baseRotateSpeed: 70
   rotateMul: 1.1
+  rotateDirection: -1
   owner: {fileID: 389370483430162252}
-  gatherTime: 1
-  weakTime: 1
+  isGather: 0
+  gatherTime: 3
+  gatherTimer: 0
+  isWeak: 0
+  weakTime: 3
+  weakTimer: 0
   addForce: 1
   RockSpriterRenderer: {fileID: 2912610129377052354}
   spriteList:
@@ -1343,6 +1366,14 @@ MonoBehaviour:
   effectDestroyDelay: 2
   smoke: {fileID: 4702024800583799040}
   smallStoneFoece: 40
+  isBounce: 0
+  isLeft: 0
+  bounceTime: 4
+  curBounceTime: 0
+  forceLeftDirection: {x: -1, y: 2, z: 0}
+  forceRightDirection: {x: 1, y: 2, z: 0}
+  decrease: 0.5
+  forceMul: 30
 --- !u!1 &6139679835290116115
 GameObject:
   m_ObjectHideFlags: 0
@@ -1360,7 +1391,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 0
+  m_IsActive: 1
 --- !u!4 &770599430276839403
 Transform:
   m_ObjectHideFlags: 0
@@ -1369,7 +1400,7 @@ Transform:
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 6139679835290116115}
   m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
-  m_LocalPosition: {x: -0.0037123, y: -0.00999999, z: 0}
+  m_LocalPosition: {x: 6.87, y: -0.00999999, z: 0}
   m_LocalScale: {x: 0.81438, y: 0.81438, z: 0.81438}
   m_ConstrainProportionsScale: 0
   m_Children: []
@@ -1409,8 +1440,8 @@ BoxCollider:
   m_IsTrigger: 1
   m_Enabled: 1
   serializedVersion: 2
-  m_Size: {x: 20, y: 4.0305195, z: 20}
-  m_Center: {x: 0, y: 1.9752598, z: 0}
+  m_Size: {x: 13.851004, y: 4.0305195, z: 20}
+  m_Center: {x: -3.074537, y: 1.9752599, z: 0}
 --- !u!1 &6239053045979137450
 GameObject:
   m_ObjectHideFlags: 0
@@ -1539,7 +1570,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 0
+  m_IsActive: 1
 --- !u!4 &3262389902459024245
 Transform:
   m_ObjectHideFlags: 0
@@ -1570,7 +1601,7 @@ MeshRenderer:
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 7208291223413765209}
-  m_Enabled: 1
+  m_Enabled: 0
   m_CastShadows: 1
   m_ReceiveShadows: 1
   m_DynamicOccludee: 1
@@ -1666,8 +1697,8 @@ MonoBehaviour:
   translator:
     autoReset: 1
     useCustomMixMode: 1
-    layerMixModes: 01000000
-    layerBlendModes: 01000000
+    layerMixModes: 0100000001000000
+    layerBlendModes: 0100000002000000
   updateTiming: 1
 --- !u!1 &7400038499920823785
 GameObject:

+ 54 - 20
ActionTowerDefense/Assets/Scripts/Skills/Rock/RockAttackTrigger.cs

@@ -10,20 +10,23 @@ public class RockAttackTrigger : AttackTrigger
     public Vector3 impactFatForcDriction = new Vector3(1, 0.2f, 0);
     public float fatForceMul = 100f;
     public float rockForceMul = 100f;
-    private float collisionStopDuration = 0.2f;
-    private float curStopTime = 0f;
-    public List<BeHitTrigger> attcakFat;
-    public List<BeHitTrigger> attcakedFat;
+    private List<BeHitTrigger> attcakFat;
+    private List<BeHitTrigger> attcakedFat;
     public int attackFatNumber = 1;
     private int curattackFatNumber = 0;
     private int damage;
     public int damageMultiple = 10;
 
+
+
+    public bool rockCollisionProtect = false; 
+
     protected override void OnEnable()
     {
         base.OnEnable();
         attcakFat.Clear();
         attcakedFat.Clear();
+        rockCollisionProtect = false;
     }
 
     protected override void OnTriggerEnter(Collider other)
@@ -31,6 +34,14 @@ public class RockAttackTrigger : AttackTrigger
         BeHitTrigger hitTrigger = other.GetComponent<BeHitTrigger>();
         if (hitTrigger)
         {
+            if (hitTrigger.owner.gameObject.GetComponent<Tower>())
+            {
+                damage = attackMethod.attackInfo.damage * damageMultiple;
+                hitTrigger.BeHit(damage);
+                HandleRockCollision();
+                rockCollisionProtect = true;
+                return;
+            }
             if (hitTrigger.owner.transform.gameObject.GetComponent<RockRoller>())
             {
                 return;
@@ -64,15 +75,19 @@ public class RockAttackTrigger : AttackTrigger
             }
         }
     }
-    public void Update()
+    private void OnTriggerExit(Collider other)
     {
-        
-        if (curStopTime < collisionStopDuration)
+        BeHitTrigger hitTrigger = other.GetComponent<BeHitTrigger>();
+        if (!hitTrigger)
         {
-            curStopTime += Time.deltaTime;
-            attcakFat.Clear();
+            return;
         }
-        if (attcakFat.Count > 0 && curStopTime > collisionStopDuration && curattackFatNumber < attackFatNumber)
+        attcakFat.Remove(hitTrigger);
+        attcakedFat.Remove(hitTrigger);
+    }
+    public void Update()
+    {
+        if (attcakFat.Count > 0 &&!rockCollisionProtect && curattackFatNumber < attackFatNumber)
         {
             foreach (BeHitTrigger hitTrigger in attcakFat)
             {
@@ -104,29 +119,48 @@ public class RockAttackTrigger : AttackTrigger
                         }
                     }
                 }
-                if (curattackFatNumber >= attackFatNumber)
+                if (curattackFatNumber >= attackFatNumber &&  !rockCollisionProtect)
                 {
                     attcakFat.Clear();
-                    HandleRockCollision(rockRoller);
+                    HandleRockCollision();
                     curattackFatNumber = 0;
-                    curStopTime = 0f;
                     attcakedFat.Clear();
+                    rockCollisionProtect = true;
                     break;
                 }
+            //foreach (BeHitTrigger hitTrigger in attcakFat)
+            //{
+            //    if (attcakedFat.Contains(hitTrigger))
+            //    {
+            //        continue;
+            //    }
+            //    GameObject fat = hitTrigger.owner.transform.gameObject;
+            //    Demonic fatD = hitTrigger.owner.transform.gameObject.GetComponent<Demonic>();
+            //    AttackTrigger at = hitTrigger.owner.transform.gameObject.GetComponentInChildren<RockAttackTrigger>();
+            //    RockRoller rock = rockRoller.GetComponent<RockRoller>();
+            //    HandleFatCollision(fat);
+            //    attcakedFat.Add(hitTrigger);
+            //    if (rock.RushTimer>rock.RushTime)
+            //    {
+            //        HandleRockCollision();
+            //        rock.RushTimer = 0;
+            //        break;
+            //    }
             }
-
         }
 
     }
-    private void HandleRockCollision(GameObject fat)
+    private void HandleRockCollision()
     {
-        if (rockRoller.GetComponent<RockRoller>().state == CharacterState.Die)
-        {
-            return;
-        }
+        //if (rockRoller.GetComponent<RockRoller>().state == CharacterState.Die)
+        //{
+        //    return;
+        //}
         Rigidbody rockRb = rockRoller.GetComponentInParent<Rigidbody>();
         RockRoller Roller = rockRoller.GetComponentInParent<RockRoller>();
         Roller.ChangeState(CharacterState.Fall);
+        Roller.isBounce = true;
+        Roller.isLeft = true;
         rockRb.AddForce(impactRockForcDriction * rockForceMul, ForceMode.Impulse);
     }
 
@@ -139,7 +173,6 @@ public class RockAttackTrigger : AttackTrigger
         fater.ChangeState(CharacterState.SpecialStatus_BlowUp);
         fatRb.AddForce(impactFatForcDriction * fatForceMul, ForceMode.Impulse);
         curattackFatNumber += 1;
-
     }
 
     protected override void OnDisable()
@@ -147,5 +180,6 @@ public class RockAttackTrigger : AttackTrigger
         base.OnDisable();
         attcakFat.Clear();
         attcakedFat.Clear();
+        rockCollisionProtect = false;
     }
 }

+ 55 - 30
ActionTowerDefense/Assets/Scripts/Skills/Rock/RockBehitTrigger.cs

@@ -16,38 +16,63 @@ public class RockBehitTrigger : BeHitTrigger
     }
     public override void BeHit(AttackController.AttackMethod attackMethod, Character attackFrom)
     {
-        if (attackMethod.attackInfo.attackMethod_Type == AttackMethod_Type.Attack_March)
+        if ((rock.isWeak && !rock.isBounce) || rock.isBounce)
         {
-            return;
+            owner.BeHit(attackMethod, attackFrom);
         }
-        if (attackFrom.gameObject.GetComponent<Demonic>() != null)
-        {
-            if (attackFrom.gameObject.GetComponent<Demonic>().myName == fatName)
-            {
-                if (curAttackTime == attackTime - 1)
-                {
-                    owner.BeHit(attackMethod, attackFrom);
-                    //rock.changeSpriter(curAttackTime+1);
-                    rock.changeScale(curAttackTime + 1);
-                    curAttackTime = 0;
-                }
-                else
-                {
-                    curAttackTime += 1;
-                    //rock.changeSpriter(curAttackTime);
-                    rock.changeScale(curAttackTime);
-                }
-            }
-            else
-            {
-                base.BeHit(attackMethod, attackFrom);
-            }
-        }
-        else
-        {
-            base.BeHit(attackMethod, attackFrom);
-        }
-
+        //¸ù¾Ýʱ¼ä¼ÆËã°ÔÌåʱ¼ä
+        //if (attackMethod.attackInfo.attackMethod_Type == AttackMethod_Type.Attack_March)
+        //{
+        //    return;
+        //}
+        //if (attackFrom.gameObject.GetComponent<Demonic>() != null)
+        //{
+        //    if (attackFrom.gameObject.GetComponent<Demonic>().myName == fatName)
+        //    {
+        //        if (rock.isWeak)
+        //        {
+        //            owner.BeHit(attackMethod, attackFrom);
+        //        }
+        //        //if (curAttackTime == attackTime - 1)
+        //        //{
+        //        //    owner.BeHit(attackMethod, attackFrom);
+        //        //    //rock.changeSpriter(curAttackTime+1);
+        //        //    rock.changeScale(curAttackTime + 1);
+        //        //    curAttackTime = 0;
+        //        //}
+        //        //else
+        //        //{
+        //        //    curAttackTime += 1;
+        //        //    //rock.changeSpriter(curAttackTime);
+        //        //    rock.changeScale(curAttackTime);
+        //        //}
+        //    }
+        //    else
+        //    {
+        //      //base.BeHit(attackMethod, attackFrom);
+        //    }
+        //}
+        //else
+        //{
+        //  //base.BeHit(attackMethod, attackFrom);
+        //}
+        //if (attackMethod.attackInfo.attackMethod_Type == AttackMethod_Type.Attack_March)
+        //{
+        //    return;
+        //}
+        //if (curAttackTime == attackTime - 1)
+        //{
+        //    owner.BeHit(attackMethod, attackFrom);
+        //    //rock.changeSpriter(curAttackTime+1);
+        //    rock.changeScale(curAttackTime + 1);
+        //    curAttackTime = 0;
+        //}
+        //else
+        //{
+        //    curAttackTime += 1;
+        //    //rock.changeSpriter(curAttackTime);
+        //    rock.changeScale(curAttackTime);
+        //}
     }
     protected override void OnDisable()
     {

+ 149 - 44
ActionTowerDefense/Assets/Scripts/Skills/Rock/RockRoller.cs

@@ -7,31 +7,34 @@ using TMPro;
 
 public class RockRoller : Enemy
 {
-    public int hitTime = 1;
-    public int curHitTime = 0;
+    private int hitTime = 1;
+    private int curHitTime = 0;
     public RockAttackTrigger attackTrigger0;
     public AttackTrigger attackEnemyTrigger0;
-    public List<TargetType> initialTargetTypes = new List<TargetType>();
-
+    private List<TargetType> initialTargetTypes = new List<TargetType>();
     public GameObject stone;
-    public string smallStone;
+    public string smallStoneE;
+    public string smallStoneC;
     public float baseRotateSpeed = 90f;
     public float rotateMul = 1f;
-    private float rotateDirection = -1f;
+    public float rotateDirection = -1f;
     private float dieTime = 0.1f;
     private float deathTimer = 0f;
     private bool isDying;
     private bool isFalled = false;
     public Enemy owner;
 
-    private bool isGather = false;
+    public bool isGather = false;
     public float gatherTime = 1f;
     private float gatherTimer = 0f;
 
-    private bool isWeak = false;
+    public bool isWeak = false;
     public float weakTime = 1f;
     private float weakTimer = 0f;
+
     public float addForce = 1f;
+    public float addRushForceMul = 2;
+    public float RushSpeedMul = 2;
 
     public SpriteRenderer RockSpriterRenderer;
     public List<Sprite> spriteList = new List<Sprite>();
@@ -46,7 +49,17 @@ public class RockRoller : Enemy
 
     public GameObject smoke;
 
-    public float smallStoneFoece = 20f;
+    public bool isBounce =false;
+    public bool isLeft = false;
+    public int bounceTime = 3;
+    private int curBounceTime = 0;
+    public Vector3 forceLeftDirection;
+    public Vector3 forceRightDirection;
+    public float decrease = 0.75f;
+    public float forceMul = 50;
+
+    //public float RushTime = 5f;
+    //public float RushTimer = 0f;
     public override void Init()
     {
         base.Init();
@@ -94,7 +107,7 @@ public class RockRoller : Enemy
         {
             stone = gameObject;
         }
-        enemyStr = $"Prefab/Enemy/{smallStone}";
+        enemyStr = $"Prefab/Enemy/{smallStoneE}";
     }
     private void InitializeSpriter()
     {
@@ -145,14 +158,11 @@ public class RockRoller : Enemy
         curHitTime = 0;
         stone.SetActive(true);
         smoke.SetActive(false);
-        if (state == CharacterState.None)
-        {
-            ChangeState(CharacterState.Idle);
-        }
+        ChangeState(CharacterState.Idle);
         if (attackEnemyTrigger0 != null)
             attackEnemyTrigger0.gameObject.SetActive(false);
         if (attackTrigger0 != null)
-            attackTrigger0.gameObject.SetActive(true);
+            attackTrigger0.gameObject.SetActive(false);
         changeSpriter(0);
         changeScale(0);
         ResetTargetTypes();
@@ -281,14 +291,9 @@ public class RockRoller : Enemy
         if (owner != null && curHitTime >= hitTime)
         {
             PlayBreakEff();
-            owner.gameObject.SetActive(false);
-            if (isBig)
-            {
-                SpawnSmallStones();
-            }
+            ChangeState(CharacterState.Die);
             curHitTime = 0;
         }
-
         isDying = false;
     }
 
@@ -297,25 +302,26 @@ public class RockRoller : Enemy
         attackEnemyTrigger0.gameObject.SetActive(false);
         ResetTargetTypes();
 
-        SingleEnemyConfig cfgEnemy = GameManager.instance.allCfgData.CfgEnemy.Get("小滚石怪");
+        SingleEnemyConfig cfgEnemy = GameManager.instance.allCfgData.CfgEnemy.Get(smallStoneC);
 
         // 生成第一个小石头
         GameObject stone1 = Util.Instantiate(enemyStr, transform.position - new Vector3(0, 0, 0), active: true);
         ConfigureSmallStone(stone1, cfgEnemy);
-        SmallStoneForce(stone1, new Vector3(-1, 1.2f, 0), smallStoneFoece);
+        stone1.GetComponent<RockRoller>().isBounce = true;
+        stone1.GetComponent<RockRoller>().isLeft = true;
 
         // 生成第二个小石头
         GameObject stone2 = Util.Instantiate(enemyStr, transform.position - new Vector3(0, 0, 0), active: true);
         ConfigureSmallStone(stone2, cfgEnemy);
-        SmallStoneForce(stone2, new Vector3(1, 1.2f, 0), smallStoneFoece);
+        stone2.GetComponent<RockRoller>().isBounce = true;
+        stone2.GetComponent<RockRoller>().isLeft = false;
 
         isFalled = false;
     }
 
-    private void SmallStoneForce(GameObject stone, Vector3 forceDirection, float forceMul)
+    private void SmallStoneForce(RockRoller Roller, Vector3 forceDirection, float forceMul)
     {
-        Rigidbody rockRb = stone.GetComponent<Rigidbody>();
-        RockRoller Roller = stone.GetComponent<RockRoller>();
+        Rigidbody rockRb = Roller.gameObject.GetComponent<Rigidbody>();
         Roller.ChangeState(CharacterState.Fall);
         rockRb.AddForce(forceDirection * forceMul, ForceMode.Impulse);
     }
@@ -324,10 +330,6 @@ public class RockRoller : Enemy
         RockRoller rock = stoneObj.GetComponent<RockRoller>();
         if (rock != null)
         {
-            Debug.Log(cfgEnemy.AttackMarch[0]);
-            Debug.Log(cfgEnemy.AttackSummon);
-            Debug.Log(cfgEnemy.MinMoveSpeed);
-            Debug.Log(cfgEnemy.MaxMoveSpeed);
             rock.attackTrigger0.attackMethod.attackInfo.damage = cfgEnemy.AttackMarch[0];
             rock.attackEnemyTrigger0.attackMethod.attackInfo.damage = cfgEnemy.AttackSummon;
             rock.owner.moveSpeed = Random.Range(cfgEnemy.MinMoveSpeed, cfgEnemy.MaxMoveSpeed);
@@ -340,7 +342,6 @@ public class RockRoller : Enemy
         {
             return;
         }
-
         ExitCurrentState();
         EnterNewState(newState);
     }
@@ -368,6 +369,9 @@ public class RockRoller : Enemy
             case CharacterState.Idle:
                 EnterIdleState();
                 break;
+            case CharacterState.Run:
+                EnterRunState();
+                break;
             case CharacterState.Rush:
                 EnterRushState();
                 break;
@@ -385,40 +389,70 @@ public class RockRoller : Enemy
                 break;
         }
     }
-
+    
     private void EnterIdleState()
     {
-        rotateDirection = -1f;
+
         rb.velocity = Vector3.zero;
         if (attackEnemyTrigger0 != null) attackEnemyTrigger0.gameObject.SetActive(false);
         if (attackTrigger0 != null) attackTrigger0.gameObject.SetActive(false);
         smoke.SetActive(false);
     }
-
+    private void EnterRunState()
+    {
+        rb.velocity = Vector3.zero;
+        rotateDirection = -1f;
+    }
     private void EnterRushState()
     {
         rb.velocity = Vector3.zero;
         if (attackEnemyTrigger0 != null) attackEnemyTrigger0.gameObject.SetActive(false);
         if (attackTrigger0 != null) attackTrigger0.gameObject.SetActive(true);
-        smoke.SetActive(true);
+        rotateDirection = -1f;
     }
 
     private void EnterRiseState()
     {
+        rb.velocity = Vector3.zero;
         isGather = true;
         gatherTimer = 0f;
-        smoke.SetActive(false);
+        smoke.SetActive(true);
+        isBounce = false;
+        attackTrigger0.rockCollisionProtect = false;
+        beSearchTrigger.gameObject.SetActive(false);
     }
 
     private void EnterFallState()
     {
+        beSearchTrigger.gameObject.SetActive(true);
         rotateDirection = 1f;
+        if (isBounce && isLeft)
+        {
+            rotateDirection = 1f;
+        }
+        else if (isBounce)
+        {
+            rotateDirection = -1f;
+        }
         weakTimer = 0f;
         smoke.SetActive(false);
+        if (isBounce)
+        {
+            curBounceTime += 1;
+        }
+        else {
+            curBounceTime = 0;
+        }
+        if (attackEnemyTrigger0 != null) attackEnemyTrigger0.gameObject.SetActive(false);
+        if (attackTrigger0 != null) attackTrigger0.gameObject.SetActive(false);
     }
 
     private void EnterDieState()
     {
+        if (isBig)
+        {
+            SpawnSmallStones();
+        }
         isDie = true;
         dieKeepTime = totalDieKeepTime;
         if (GameManager.instance.gameType != GameType.GameEnd)
@@ -437,14 +471,58 @@ public class RockRoller : Enemy
         deathTimer = 0f;
         if (owner != null) owner.attributeStatus.hitState = 0;
         smoke.SetActive(false);
+        isBounce = false;
+        curBounceTime = 0;
     }
 
+    public override bool GetAttack()
+    {
+        List<Character> list =searchTrigger.GetAllTargets(attackController.targetTypes, attackController.curAttackMethod.canHitFly);
+        if (list.Count >= 1)
+        {
+            return true;
+        }
+        return false;
+    }
     public override void OnState()
     {
+        bool isAttack = GetAttack();
         switch (state)
         {
             case CharacterState.Idle:
-                ChangeState(CharacterState.Rise);
+                if (isBounce && curBounceTime < bounceTime - 1)
+                {
+                    if (isLeft)
+                    {
+                        SmallStoneForce(this, forceLeftDirection, forceMul * (Mathf.Pow(decrease, curBounceTime)));
+                    }
+                    else
+                    {
+                        SmallStoneForce(this, forceRightDirection, forceMul * (Mathf.Pow(decrease, curBounceTime)));
+                    }
+                    break;
+                }
+                else if (curBounceTime == bounceTime - 1)
+                {
+                    ChangeState(CharacterState.Fall);
+                    isBounce = false;
+                    curBounceTime = 0;
+                    isWeak = true;
+                }
+                else
+                {
+                    ChangeState(CharacterState.Run);
+                }
+                break;
+            case CharacterState.Run:
+                if (isAttack)
+                {
+                    ChangeState(CharacterState.Rise);
+                }
+                else
+                {
+                    Run();
+                }
                 break;
             case CharacterState.Rise:
                 HandleRiseState();
@@ -457,6 +535,9 @@ public class RockRoller : Enemy
                 break;
             case CharacterState.SpecialStatus_BlowUp:
                 attributeStatus.SpecialStateEffect(SpecialState.BlownUp);
+                Vector3 velocity = rb.velocity;
+                velocity.y += extraFallGravity * Time.deltaTime;
+                rb.velocity = velocity;
                 break;
             case CharacterState.Die:
                 dieKeepTime -= Time.deltaTime;
@@ -491,7 +572,15 @@ public class RockRoller : Enemy
                 break;
         }
     }
-
+    private void Run()
+    {
+        Vector3 velocity = rb.velocity;
+        if (Mathf.Abs(velocity.x) < moveSpeed)
+        {
+            velocity.x += addForce;
+        }
+        rb.velocity = velocity;
+    }
     private void HandleRiseState()
     {
         if (isGather && gatherTimer < gatherTime)
@@ -500,7 +589,6 @@ public class RockRoller : Enemy
         }
         else
         {
-            Debug.Log("gatherFinsh");
             isGather = false;
             ChangeState(CharacterState.Rush);
         }
@@ -509,15 +597,22 @@ public class RockRoller : Enemy
     private void HandleRushState()
     {
         Vector3 velocity = rb.velocity;
-        if (Mathf.Abs(velocity.x) < moveSpeed)
+        if (Mathf.Abs(velocity.x) < moveSpeed*RushSpeedMul)
         {
-            velocity.x += addForce;
+            velocity.x += addForce * addRushForceMul;
         }
         rb.velocity = velocity;
+        //if (RushTimer < RushTime)
+        //{
+        //    RushTimer += Time.deltaTime;
+        //}
     }
 
     private void HandleFallState()
     {
+        Vector3 velocity = rb.velocity;
+        velocity.y += extraFallGravity * Time.deltaTime;
+        rb.velocity = velocity;
         if (!foot.TrigGround)
         {
             isWeak = true;
@@ -525,8 +620,16 @@ public class RockRoller : Enemy
 
         if (isWeak && weakTimer < weakTime && foot.TrigGround)
         {
-            rb.velocity = Vector3.zero;
-            weakTimer += Time.deltaTime;
+            if (isBounce)
+            {
+                ChangeState(CharacterState.Idle);
+                isWeak = false;
+            }
+            else
+            {
+                rb.velocity = Vector3.zero;
+                weakTimer += Time.deltaTime;
+            }
         }
         else if (weakTimer >= weakTime)
         {
@@ -539,5 +642,7 @@ public class RockRoller : Enemy
     {
         EnemyCreater.instance.OnEnemyRecycle(this);
         ResetState();
+        isBounce = false;
+        curBounceTime = 0;
     }
 }

BIN
ActionTowerDefense/Luban/Config/Datas/怪物表.xlsx