瀏覽代碼

龙卷风造成伤害

LAPTOP-OM1V99U2\永远de小亡灵 1 年之前
父節點
當前提交
095f17a810

+ 1 - 1
ActionTowerDefense/Assets/Resources/Prefab/BaGua/Demonic_Giant_Yang.prefab

@@ -692,7 +692,7 @@ MonoBehaviour:
   playerMesh: {fileID: 0}
   playerMats: []
   playerOut: []
-  soulPrefab: {fileID: 0}
+  soulPrefab: {fileID: 1723151111827507807, guid: e2b65aa482f2f1447a4074208d72b778, type: 3}
   soulStartSpeed: 1
   isInvisible: 0
   invisibleTime: 0

+ 1 - 1
ActionTowerDefense/Assets/Resources/Prefab/BaGua/Demonic_Giant_Yin.prefab

@@ -692,7 +692,7 @@ MonoBehaviour:
   playerMesh: {fileID: 0}
   playerMats: []
   playerOut: []
-  soulPrefab: {fileID: 0}
+  soulPrefab: {fileID: 1723151111827507807, guid: e2b65aa482f2f1447a4074208d72b778, type: 3}
   soulStartSpeed: 1
   isInvisible: 0
   invisibleTime: 0

+ 33 - 1
ActionTowerDefense/Assets/Resources/Prefab/BaGua/Effect_LiGua.prefab

@@ -9,7 +9,9 @@ GameObject:
   serializedVersion: 6
   m_Component:
   - component: {fileID: 2340096923802611277}
-  m_Layer: 7
+  - component: {fileID: 8954824379418312413}
+  - component: {fileID: 7507774989994367828}
+  m_Layer: 0
   m_Name: Effect_LiGua
   m_TagString: Untagged
   m_Icon: {fileID: 0}
@@ -32,6 +34,36 @@ Transform:
   m_Father: {fileID: 0}
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &8954824379418312413
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4234023256197139610}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: c6a1f6e135f479a4e96903b5855eb3b4, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  intervalTime: 0.3
+  damage: 10
+  moveCharacrters: []
+  totalTime: 10
+  time: 0
+--- !u!65 &7507774989994367828
+BoxCollider:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4234023256197139610}
+  m_Material: {fileID: 0}
+  m_IsTrigger: 1
+  m_Enabled: 1
+  serializedVersion: 2
+  m_Size: {x: 4.4957623, y: 24.611729, z: 1}
+  m_Center: {x: 0.15332294, y: 10.885927, z: 0}
 --- !u!1001 &3887524328526672740
 PrefabInstance:
   m_ObjectHideFlags: 0

+ 6 - 2
ActionTowerDefense/Assets/Resources/Prefab/ESpirits_Assassin.prefab

@@ -352,7 +352,8 @@ MonoBehaviour:
   minAttackDis: 0
   needToChange: 0
   attackRatio: 0
-  dropSoul: 3
+  dropSoulMax: 3
+  dropSoulMin: 1
   dropSoulAngle: 90
   aimEffect: {fileID: 6373916053725309541}
   dashEffect: {fileID: 2254593709981819441}
@@ -433,6 +434,8 @@ MonoBehaviour:
   rb: {fileID: 0}
   haveGravity: 1
   trigGroundList: []
+  myBaGuaTrigger: {fileID: 0}
+  baGuaTrigger: []
 --- !u!1 &5216717017252562314
 GameObject:
   m_ObjectHideFlags: 0
@@ -1091,7 +1094,7 @@ GameObject:
   - component: {fileID: 2288379621507428556}
   - component: {fileID: 6353082427811530657}
   - component: {fileID: 5333142802677931907}
-  m_Layer: 0
+  m_Layer: 8
   m_Name: BeHitTrigger
   m_TagString: Untagged
   m_Icon: {fileID: 0}
@@ -1139,6 +1142,7 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   owner: {fileID: 0}
+  attackerID: 0
 --- !u!1 &8802879426389446295
 GameObject:
   m_ObjectHideFlags: 0

+ 7 - 2
ActionTowerDefense/Assets/Resources/Prefab/ESpirits_Float.prefab

@@ -42,7 +42,7 @@ GameObject:
   - component: {fileID: 6076127848463763}
   - component: {fileID: 8507032990732667563}
   - component: {fileID: 9020361017135710302}
-  m_Layer: 0
+  m_Layer: 8
   m_Name: BeHitTrigger
   m_TagString: Untagged
   m_Icon: {fileID: 0}
@@ -90,6 +90,7 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   owner: {fileID: 0}
+  attackerID: 0
 --- !u!1 &1637528673901708253
 GameObject:
   m_ObjectHideFlags: 0
@@ -924,6 +925,8 @@ MonoBehaviour:
   rb: {fileID: 0}
   haveGravity: 1
   trigGroundList: []
+  myBaGuaTrigger: {fileID: 0}
+  baGuaTrigger: []
 --- !u!1 &8639832132491289359
 GameObject:
   m_ObjectHideFlags: 0
@@ -1148,13 +1151,15 @@ MonoBehaviour:
   maxMoveSpeed: 12
   minMoveSpeed: 8
   runSpeed: 0
+  type: 0
   searchState: 0
   attackDistance: 10
   maxAttackDis: 0
   minAttackDis: 0
   needToChange: 0
   attackRatio: 0
-  dropSoul: 3
+  dropSoulMax: 3
+  dropSoulMin: 1
   dropSoulAngle: 90
   aimEffect: {fileID: 0}
   dashEffect: {fileID: 0}

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

@@ -352,7 +352,8 @@ MonoBehaviour:
   minAttackDis: 0
   needToChange: 0
   attackRatio: 0
-  dropSoul: 3
+  dropSoulMax: 3
+  dropSoulMin: 1
   dropSoulAngle: 90
   aimEffect: {fileID: 0}
   dashEffect: {fileID: 0}
@@ -433,6 +434,8 @@ MonoBehaviour:
   rb: {fileID: 0}
   haveGravity: 1
   trigGroundList: []
+  myBaGuaTrigger: {fileID: 0}
+  baGuaTrigger: []
 --- !u!1 &5216717017252562314
 GameObject:
   m_ObjectHideFlags: 0
@@ -921,7 +924,7 @@ GameObject:
   - component: {fileID: 2288379621507428556}
   - component: {fileID: 6353082427811530657}
   - component: {fileID: 5333142802677931907}
-  m_Layer: 0
+  m_Layer: 8
   m_Name: BeHitTrigger
   m_TagString: Untagged
   m_Icon: {fileID: 0}
@@ -969,6 +972,7 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   owner: {fileID: 0}
+  attackerID: 0
 --- !u!1 &8802879426389446295
 GameObject:
   m_ObjectHideFlags: 0

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

@@ -42,7 +42,7 @@ GameObject:
   - component: {fileID: 6076127848463763}
   - component: {fileID: 8507032990732667563}
   - component: {fileID: 9020361017135710302}
-  m_Layer: 0
+  m_Layer: 8
   m_Name: BeHitTrigger
   m_TagString: Untagged
   m_Icon: {fileID: 0}
@@ -90,6 +90,7 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   owner: {fileID: 0}
+  attackerID: 0
 --- !u!1 &1637528673901708253
 GameObject:
   m_ObjectHideFlags: 0
@@ -922,6 +923,8 @@ MonoBehaviour:
   rb: {fileID: 0}
   haveGravity: 1
   trigGroundList: []
+  myBaGuaTrigger: {fileID: 0}
+  baGuaTrigger: []
 --- !u!1 &8639832132491289359
 GameObject:
   m_ObjectHideFlags: 0
@@ -1112,7 +1115,8 @@ MonoBehaviour:
   minAttackDis: 9
   needToChange: 1
   attackRatio: 0
-  dropSoul: 1
+  dropSoulMax: 3
+  dropSoulMin: 1
   dropSoulAngle: 90
   aimEffect: {fileID: 0}
   dashEffect: {fileID: 0}

+ 6 - 2
ActionTowerDefense/Assets/Resources/Prefab/Enemy_Sword.prefab

@@ -351,7 +351,8 @@ MonoBehaviour:
   minAttackDis: 0
   needToChange: 0
   attackRatio: 0
-  dropSoul: 2
+  dropSoulMax: 3
+  dropSoulMin: 1
   dropSoulAngle: 90
   aimEffect: {fileID: 0}
   dashEffect: {fileID: 0}
@@ -448,6 +449,8 @@ MonoBehaviour:
   rb: {fileID: 0}
   haveGravity: 1
   trigGroundList: []
+  myBaGuaTrigger: {fileID: 0}
+  baGuaTrigger: []
 --- !u!1 &3381575400802596466
 GameObject:
   m_ObjectHideFlags: 0
@@ -627,7 +630,7 @@ GameObject:
   - component: {fileID: 6936852277045865654}
   - component: {fileID: 2640996939016594402}
   - component: {fileID: 6427563181875878110}
-  m_Layer: 0
+  m_Layer: 8
   m_Name: BeHitTrigger
   m_TagString: Untagged
   m_Icon: {fileID: 0}
@@ -675,6 +678,7 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   owner: {fileID: 0}
+  attackerID: 0
 --- !u!1 &6164447163453378808
 GameObject:
   m_ObjectHideFlags: 0

+ 51 - 6
ActionTowerDefense/Assets/Scripts/BaGua/BaGua_LiGua.cs

@@ -4,15 +4,60 @@ using UnityEngine;
 
 public class BaGua_LiGua : MonoBehaviour
 {
-    // Start is called before the first frame update
-    void Start()
+    public float intervalTime;                                              //造成伤害的间隔时间
+    public int damage;                                                      //造成的伤害
+    public List<MoveCharacter> moveCharacrters = new List<MoveCharacter>(); //被造成伤害的角色
+    public float totalTime;                                                 //多少时间后消失
+    [HideInInspector]public float time;                                     //经过的时间
+
+    private void Update()
+    {
+        time += Time.deltaTime;
+        if (time >= totalTime)
+        {
+            gameObject.SetActive(false);
+        }
+    }
+
+    private void OnTriggerEnter(Collider other)
+    {
+        BeHitTrigger beHitTrigger = other.GetComponent<BeHitTrigger>();
+        if (beHitTrigger != null)
+        {
+            if (other.gameObject.layer == 8 || other.gameObject.layer == 16)
+            {
+                MoveCharacter character = other.GetComponentInParent<MoveCharacter>();
+                moveCharacrters.Add(character);
+                character.sustainedInjuryTime = intervalTime;
+                character.sustainedInjury_IntervalTime = intervalTime;
+                character.sustainedInjury_damage = damage;
+                character.isSustainedInjury = true;
+            }
+        }
+    }
+
+    private void OnTriggerExit(Collider other)
     {
-        
+        BeHitTrigger beHitTrigger = other.GetComponent<BeHitTrigger>();
+        if (beHitTrigger != null)
+        {
+            if (other.gameObject.layer == 8 || other.gameObject.layer == 16)
+            {
+                MoveCharacter character = other.GetComponentInParent<MoveCharacter>();
+                if (moveCharacrters.Exists(i => i == character))
+                {
+                    character.isSustainedInjury = false;
+                    moveCharacrters.Remove(character);
+                }
+            }
+        }
     }
 
-    // Update is called once per frame
-    void Update()
+    private void OnDisable()
     {
-        
+        for(int i= 0; i < moveCharacrters.Count; i++)
+        {
+            moveCharacrters[i].isSustainedInjury = false;
+        }
     }
 }

+ 5 - 0
ActionTowerDefense/Assets/Scripts/Demonic.cs

@@ -552,6 +552,11 @@ public class Demonic : MoveCharacter
                         GameObject effect = Instantiate(effectPrefab);
                         effect.transform.position = transform.position;
                     }
+                    if (!isSpirit)
+                    {
+                        Corpse.allCorpsesNum += 1;
+                        Corpse.isChange = true;
+                    }
                     gameObject.SetActive(false);
                 }
 

+ 60 - 50
ActionTowerDefense/Assets/Scripts/MoveCharacter.cs

@@ -102,6 +102,12 @@ public class MoveCharacter : Character
     public float transmitTime;
     public PortalsController portalsController;
 
+    [Header("受到持续伤害")]
+    public bool isSustainedInjury;                          //是否正在受到持续伤害
+    [HideInInspector] public float sustainedInjuryTime;     //存储持续伤害经过的时间
+    public float sustainedInjury_IntervalTime;              //每次伤害的间隔时间
+    public int sustainedInjury_damage;                      //每次造成的伤害
+
     private void Awake()
     {
         spinee = bodyTrans.GetChild(0).gameObject;
@@ -288,6 +294,11 @@ public class MoveCharacter : Character
                 portalsController.rbs.Remove(rb);
             }
         }
+        //受到持续伤害
+        if (isSustainedInjury)
+        {
+            SustainedInjury();
+        }
     }
 
     //伤害减免状态开启(减免程度,减免时长)
@@ -317,66 +328,65 @@ public class MoveCharacter : Character
 
     public override void BeHit(int damage, Vector3 force, bool changeHurt, float repelValue)
     {
-        if (!isTran)
+        if (isInvisible)
         {
-            if (isInvisible)
-            {
-                return;
-            }
-            if (invincibleTime > 0)
-            {
-                return;
-            }
+            return;
+        }
+        if (invincibleTime > 0)
+        {
+            return;
+        }
 
-            //漂浮易伤
-            if (isFloat)
-            {
-                damage = (int)((1 + easyToGetHit) * damage);
-            }
+        //漂浮易伤
+        if (isFloat)
+        {
+            damage = (int)((1 + easyToGetHit) * damage);
+        }
 
-            //伤害减免
-            if (isDamageReduction)
-            {
-                damage = (int)((1 - reductionDegree) * damage);
-            }
+        //伤害减免
+        if (isDamageReduction)
+        {
+            damage = (int)((1 - reductionDegree) * damage);
+        }
 
-            hp -= damage;
-            uiHp.Show(hp, totalHp);
-            if (hp <= 0)
-            {
-                ChangeState(CharacterState.Die);
-                if(!canNotAddForce)
-                    rb.AddForce(force);
-                return;
-            }
-            if (canNotChangeHurt)
-            {
-                return;
-            }
-            beRepelValue -= repelValue;
-            if (changeHurt && state == CharacterState.Weak)
-            {
-                if (!canNotAddForce)
-                    rb.AddForce(force * weakHitRate);
-            }
-            else
-            {
-                if (changeHurt && beRepelValue <= 0)
-                {
-                    ChangeState(CharacterState.Weak);
-                    if (!canNotAddForce)
-                        rb.AddForce(force);
-                }
-            }
+        hp -= damage;
+        uiHp.Show(hp, totalHp);
+        if (hp <= 0)
+        {
+            ChangeState(CharacterState.Die);
+            if (!canNotAddForce)
+                rb.AddForce(force);
+            return;
+        }
+        if (canNotChangeHurt)
+        {
+            return;
+        }
+        beRepelValue -= repelValue;
+        if (changeHurt && state == CharacterState.Weak)
+        {
+            if (!canNotAddForce)
+                rb.AddForce(force * weakHitRate);
         }
         else
         {
-            if (pc == null)
+            if (changeHurt && beRepelValue <= 0)
             {
-                pc = GetComponentInParent<PlayerController>();
+                ChangeState(CharacterState.Weak);
+                if (!canNotAddForce)
+                    rb.AddForce(force);
             }
-            pc.BeHit(damage, force, false, repelValue);
         }
     }
 
+    //受到持续伤害
+    public void SustainedInjury()
+    {
+        sustainedInjuryTime += Time.deltaTime;
+        if(sustainedInjuryTime >= sustainedInjury_IntervalTime)
+        {
+            sustainedInjuryTime = 0;
+            BeHit(sustainedInjury_damage, Vector3.zero,false,0);
+        }
+    }
 }