GrainFull 1 місяць тому
батько
коміт
941caa3915

+ 8 - 3
ActionTowerDefense/Assets/Resources/Prefab/Enemy/Enemy_HugeRockRoller.prefab

@@ -252,7 +252,7 @@ SpriteRenderer:
   m_SortingLayerID: 21624701
   m_SortingLayer: 5
   m_SortingOrder: -100
-  m_Sprite: {fileID: 21300000, guid: eb8e6d9d71c428a40a16636e97375fa1, type: 3}
+  m_Sprite: {fileID: 21300000, guid: c1a1c886a1a9d0444844a1835f067d94, type: 3}
   m_Color: {r: 1, g: 1, b: 1, a: 1}
   m_FlipX: 0
   m_FlipY: 0
@@ -518,6 +518,7 @@ MonoBehaviour:
   curX: 0
   mats: []
   attackTime: 3
+  curAttackTime: 0
   fatName: "\u76FE\u7532\u5175"
   rock: {fileID: 389370483430162252}
 --- !u!1 &4263167930189685877
@@ -919,7 +920,7 @@ Transform:
   m_GameObject: {fileID: 5440846222648032759}
   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
   m_LocalPosition: {x: 0, y: 0, z: 0}
-  m_LocalScale: {x: 2, y: 2, z: 2}
+  m_LocalScale: {x: 1.8, y: 1.8, z: 1.8}
   m_ConstrainProportionsScale: 1
   m_Children:
   - {fileID: 7308851680811915975}
@@ -1330,7 +1331,7 @@ MonoBehaviour:
   addForce: 1
   RockSpriterRenderer: {fileID: 5963238826951358188}
   spriteList:
-  - {fileID: 21300000, guid: eb8e6d9d71c428a40a16636e97375fa1, type: 3}
+  - {fileID: 21300000, guid: c1a1c886a1a9d0444844a1835f067d94, type: 3}
   - {fileID: 21300000, guid: c1a1c886a1a9d0444844a1835f067d94, type: 3}
   - {fileID: 21300000, guid: eb8e6d9d71c428a40a16636e97375fa1, type: 3}
   - {fileID: 21300000, guid: eb8e6d9d71c428a40a16636e97375fa1, type: 3}
@@ -1340,6 +1341,10 @@ MonoBehaviour:
   - 1.8
   - 1.8
   isBig: 1
+  stoneBreakEff: {fileID: 8472418304698881539, guid: b48ff62ad1a966f499ada6381babc09d, type: 3}
+  effectSpawnPoint: {fileID: 0}
+  effectDestroyDelay: 2
+  smallStoneFoece: 30
 --- !u!1 &6139679835290116115
 GameObject:
   m_ObjectHideFlags: 0

+ 8 - 3
ActionTowerDefense/Assets/Resources/Prefab/Enemy/Enemy_RockRoller.prefab

@@ -252,7 +252,7 @@ SpriteRenderer:
   m_SortingLayerID: 21624701
   m_SortingLayer: 5
   m_SortingOrder: -100
-  m_Sprite: {fileID: 21300000, guid: eb8e6d9d71c428a40a16636e97375fa1, type: 3}
+  m_Sprite: {fileID: 21300000, guid: c1a1c886a1a9d0444844a1835f067d94, type: 3}
   m_Color: {r: 1, g: 1, b: 1, a: 1}
   m_FlipX: 0
   m_FlipY: 0
@@ -518,6 +518,7 @@ MonoBehaviour:
   curX: 0
   mats: []
   attackTime: 2
+  curAttackTime: 0
   fatName: "\u76FE\u7532\u5175"
   rock: {fileID: 389370483430162252}
 --- !u!1 &4263167930189685877
@@ -919,7 +920,7 @@ Transform:
   m_GameObject: {fileID: 5440846222648032759}
   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_LocalScale: {x: 1.4, y: 1.4, z: 1.4}
   m_ConstrainProportionsScale: 1
   m_Children:
   - {fileID: 7308851680811915975}
@@ -1330,7 +1331,7 @@ MonoBehaviour:
   addForce: 1
   RockSpriterRenderer: {fileID: 5963238826951358188}
   spriteList:
-  - {fileID: 21300000, guid: eb8e6d9d71c428a40a16636e97375fa1, type: 3}
+  - {fileID: 21300000, guid: c1a1c886a1a9d0444844a1835f067d94, type: 3}
   - {fileID: 21300000, guid: eb8e6d9d71c428a40a16636e97375fa1, type: 3}
   - {fileID: 21300000, guid: eb8e6d9d71c428a40a16636e97375fa1, type: 3}
   scaleList:
@@ -1338,6 +1339,10 @@ MonoBehaviour:
   - 1.4
   - 1.4
   isBig: 1
+  stoneBreakEff: {fileID: 8472418304698881539, guid: b48ff62ad1a966f499ada6381babc09d, type: 3}
+  effectSpawnPoint: {fileID: 0}
+  effectDestroyDelay: 2
+  smallStoneFoece: 40
 --- !u!1 &6139679835290116115
 GameObject:
   m_ObjectHideFlags: 0

+ 10 - 5
ActionTowerDefense/Assets/Resources/Prefab/Enemy/Enemy_SmallRockRoller.prefab

@@ -24,7 +24,7 @@ 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.01, z: 0}
+  m_LocalPosition: {x: -0.0037123, y: -0.082, z: 0}
   m_LocalScale: {x: 0.81438, y: 0.81438, z: 0.81438}
   m_ConstrainProportionsScale: 0
   m_Children:
@@ -434,6 +434,7 @@ MonoBehaviour:
   curX: 0
   mats: []
   attackTime: 1
+  curAttackTime: 0
   fatName: "\u76FE\u7532\u5175"
   rock: {fileID: 389370483430162252}
 --- !u!1 &3168192831983976468
@@ -461,7 +462,7 @@ Transform:
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 3168192831983976468}
   m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
-  m_LocalPosition: {x: 0, y: 0.9, z: 0}
+  m_LocalPosition: {x: 0, y: 1.314, z: 0}
   m_LocalScale: {x: 0.6, y: 0.6, z: 0.6}
   m_ConstrainProportionsScale: 1
   m_Children: []
@@ -509,7 +510,7 @@ SpriteRenderer:
   m_SortingLayerID: 21624701
   m_SortingLayer: 5
   m_SortingOrder: -100
-  m_Sprite: {fileID: 21300000, guid: e6fb64359c1240144974490a4393cc7d, type: 3}
+  m_Sprite: {fileID: 21300000, guid: c1a1c886a1a9d0444844a1835f067d94, type: 3}
   m_Color: {r: 1, g: 1, b: 1, a: 1}
   m_FlipX: 0
   m_FlipY: 0
@@ -919,7 +920,7 @@ Transform:
   m_GameObject: {fileID: 5440846222648032759}
   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
   m_LocalPosition: {x: 0, y: 0, z: 0}
-  m_LocalScale: {x: 0.6, y: 0.6, z: 0.6}
+  m_LocalScale: {x: 1, y: 1, z: 1}
   m_ConstrainProportionsScale: 1
   m_Children:
   - {fileID: 7444791377293885762}
@@ -1330,12 +1331,16 @@ MonoBehaviour:
   addForce: 1
   RockSpriterRenderer: {fileID: 2912610129377052354}
   spriteList:
-  - {fileID: 21300000, guid: eb8e6d9d71c428a40a16636e97375fa1, type: 3}
+  - {fileID: 21300000, guid: c1a1c886a1a9d0444844a1835f067d94, type: 3}
   - {fileID: 21300000, guid: eb8e6d9d71c428a40a16636e97375fa1, type: 3}
   scaleList:
   - 1
   - 1
   isBig: 0
+  stoneBreakEff: {fileID: 8472418304698881539, guid: b48ff62ad1a966f499ada6381babc09d, type: 3}
+  effectSpawnPoint: {fileID: 0}
+  effectDestroyDelay: 2
+  smallStoneFoece: 40
 --- !u!1 &6139679835290116115
 GameObject:
   m_ObjectHideFlags: 0

+ 2 - 2
ActionTowerDefense/Assets/Scripts/Characters/AttackTrigger.cs

@@ -66,7 +66,7 @@ public class AttackTrigger : MonoBehaviour
         }
     }
 
-    private void OnEnable()
+    protected virtual void OnEnable()
     {
         trigedObjs.Clear();
         cantSingleAttack = false;
@@ -85,7 +85,7 @@ public class AttackTrigger : MonoBehaviour
         }
     }
 
-    private void OnDisable()
+    protected virtual void OnDisable()
     {
         if (canBreakWall)
         {

+ 2 - 2
ActionTowerDefense/Assets/Scripts/Characters/BeHitTrigger.cs

@@ -66,13 +66,13 @@ public class BeHitTrigger : MonoBehaviour
             Invoke("TurnOrigColor", 0.1f);
         }
     }
-    private void OnEnable()
+    protected virtual void OnEnable()
     {
         isWhite = false;
         mats = new List<Material>();
     }
 
-    private void OnDisable()
+    protected virtual void OnDisable()
     {
         foreach (Material m in mats)
         {

+ 13 - 1
ActionTowerDefense/Assets/Scripts/Skills/Rock/RockAttackTrigger.cs

@@ -19,7 +19,12 @@ public class RockAttackTrigger : AttackTrigger
     private int damage;
     public int damageMultiple = 10;
 
-
+    protected override void OnEnable()
+    {
+        base.OnEnable();
+        attcakFat.Clear();
+        attcakedFat.Clear();
+    }
 
     protected override void OnTriggerEnter(Collider other)
     {
@@ -136,4 +141,11 @@ public class RockAttackTrigger : AttackTrigger
         curattackFatNumber += 1;
 
     }
+
+    protected override void OnDisable()
+    {
+        base.OnDisable();
+        attcakFat.Clear();
+        attcakedFat.Clear();
+    }
 }

+ 17 - 4
ActionTowerDefense/Assets/Scripts/Skills/Rock/RockBehitTrigger.cs

@@ -5,12 +5,21 @@ using UnityEngine;
 public class RockBehitTrigger : BeHitTrigger
 {
     public int attackTime = 2;
-    private int curAttackTime = 0;
+    public int curAttackTime = 0;
     public string fatName = "¶Ü¼×±ø";
     public RockRoller rock;
+
+    protected override void OnEnable()
+    {
+        base.OnEnable();
+        curAttackTime = 0;
+    }
     public override void BeHit(AttackController.AttackMethod attackMethod, Character attackFrom)
     {
-
+        if (attackMethod.attackInfo.attackMethod_Type == AttackMethod_Type.Attack_March)
+        {
+            return;
+        }
         if (attackFrom.gameObject.GetComponent<Demonic>() != null)
         {
             if (attackFrom.gameObject.GetComponent<Demonic>().myName == fatName)
@@ -19,8 +28,8 @@ public class RockBehitTrigger : BeHitTrigger
                 {
                     owner.BeHit(attackMethod, attackFrom);
                     //rock.changeSpriter(curAttackTime+1);
-                    curAttackTime = 0;
                     rock.changeScale(curAttackTime + 1);
+                    curAttackTime = 0;
                 }
                 else
                 {
@@ -40,6 +49,10 @@ public class RockBehitTrigger : BeHitTrigger
         }
 
     }
-
+    protected override void OnDisable()
+    {
+        base.OnDisable();
+        curAttackTime = 0;
+    }
 
 }

+ 54 - 5
ActionTowerDefense/Assets/Scripts/Skills/Rock/RockRoller.cs

@@ -40,6 +40,11 @@ public class RockRoller : Enemy
     public bool isBig;
     private string enemyStr;
 
+    public GameObject stoneBreakEff;
+    public Transform effectSpawnPoint;
+    public float effectDestroyDelay = 2f;
+
+    public float smallStoneFoece = 20f;
     public override void Init()
     {
         base.Init();
@@ -54,6 +59,7 @@ public class RockRoller : Enemy
         InitializeStoneReference();
         InitializeSpriter();
         InitializeScale();
+        InitializeEffectSpawnPoint();
     }
 
     private void InitializeComponents()
@@ -108,6 +114,14 @@ public class RockRoller : Enemy
     {
         transform.localScale = new Vector3(1f, 1f, 1f)*scaleList[id];
     }
+
+    private void InitializeEffectSpawnPoint()
+    {
+        if (effectSpawnPoint == null && stone != null)
+        {
+            effectSpawnPoint = stone.transform;
+        }
+    }
     protected override void OnEnable()
     {
         base.OnEnable();
@@ -127,6 +141,7 @@ public class RockRoller : Enemy
         isWeak = false;
         rotateDirection = -1f;
         curHitTime = 0;
+        stone.SetActive(true);
         if (state == CharacterState.None)
         {
             ChangeState(CharacterState.Idle);
@@ -136,6 +151,7 @@ public class RockRoller : Enemy
         if (attackTrigger0 != null)
             attackTrigger0.gameObject.SetActive(true);
         changeSpriter(0);
+        changeScale(0);
         ResetTargetTypes();
     }
 
@@ -155,6 +171,10 @@ public class RockRoller : Enemy
 
         HandleOwnerSpecialState();
         Rotate();
+        if (GameManager.instance.gameType == GameType.GameEnd)
+        {
+            ChangeState(CharacterState.Die);
+        }
     }
 
     public void Rotate()
@@ -171,7 +191,25 @@ public class RockRoller : Enemy
         stone.transform.Rotate(Vector3.forward, rotateDirection * currentSpeed * Time.deltaTime);
     }
 
-
+    private void PlayBreakEff()
+    {
+        Vector3 spawnPos = effectSpawnPoint.position;
+        GameObject effectObj;
+        if (PoolManager.instance != null)
+        {
+            effectObj = PoolManager.Instantiate(stoneBreakEff, spawnPos);
+        }
+        else
+        {
+            effectObj = Instantiate(stoneBreakEff, effectSpawnPoint);
+        }
+        effectObj.transform.localScale = transform.localScale;
+        // 自动销毁特效,防止内存泄漏
+        if (effectDestroyDelay > 0)
+        {
+            Destroy(effectObj, effectDestroyDelay);
+        }
+    }
     private void UpdateHitFeedback()
     {
         hitFeedbackSystem.canBeHitStun = false;
@@ -210,6 +248,7 @@ public class RockRoller : Enemy
         if (owner != null && owner.state == CharacterState.SpecialStatus_BlowUp &&
             owner.attributeStatus.hitState == 1 && !isDying)
         {
+            stone.SetActive(false);
             StartDying();
         }
 
@@ -238,6 +277,7 @@ public class RockRoller : Enemy
     {
         if (owner != null && curHitTime >= hitTime)
         {
+            PlayBreakEff();
             owner.gameObject.SetActive(false);
             if (isBig)
             {
@@ -257,16 +297,25 @@ public class RockRoller : Enemy
         SingleEnemyConfig cfgEnemy = GameManager.instance.allCfgData.CfgEnemy.Get("小滚石怪");
 
         // 生成第一个小石头
-        GameObject enemyObj = Util.Instantiate(enemyStr, transform.position - new Vector3(-1, 0, 0), active: true);
-        ConfigureSmallStone(enemyObj, cfgEnemy);
+        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);
 
         // 生成第二个小石头
-        GameObject enemyObj1 = Util.Instantiate(enemyStr, transform.position - new Vector3(1, 0, 0), active: true);
-        ConfigureSmallStone(enemyObj1, cfgEnemy);
+        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);
 
         isFalled = false;
     }
 
+    private void SmallStoneForce(GameObject stone, Vector3 forceDirection, float forceMul)
+    {
+        Rigidbody rockRb = stone.GetComponent<Rigidbody>();
+        RockRoller Roller = stone.GetComponent<RockRoller>();
+        Roller.ChangeState(CharacterState.Fall);
+        rockRb.AddForce(forceDirection * forceMul, ForceMode.Impulse);
+    }
     private void ConfigureSmallStone(GameObject stoneObj, SingleEnemyConfig cfgEnemy)
     {
         RockRoller rock = stoneObj.GetComponent<RockRoller>();