Преглед на файлове

"1.怪物和使魔受击会被打断的逻辑需要只在【玩家】对【怪物】的攻击上体现,
怪物和怪物之间频繁触发会过于打断战场进度。
2.每个招式会造成的【硬直的时间】也需要在玩家的【招式】上进行设置,
(只有attack_summon击中敌人时,会有【硬直】的效果。"

wulifu преди 1 година
родител
ревизия
5371effc0b

+ 10 - 3
ActionTowerDefense/Assets/Resources/Prefab/Demonic_Arrow.prefab

@@ -978,16 +978,24 @@ MonoBehaviour:
   - damage: 40
     attackDir: {x: -1, y: 0, z: 0}
     force: 0
+    changeHurt: 1
+    hurtTime: 0.3
   - damage: 40
     attackDir: {x: -1, y: 0, z: 0}
     force: 0
+    changeHurt: 1
+    hurtTime: 0.3
   - damage: 80
     attackDir: {x: -1, y: 0, z: 0}
     force: 0
+    changeHurt: 1
+    hurtTime: 0.3
   attack2Infos:
   - damage: 40
     attackDir: {x: -1, y: 0, z: 0}
     force: 0
+    changeHurt: 0
+    hurtTime: 0
   attackTriggers: []
   attackType: 1
   bulletPrefab: {fileID: 7473170563405908938, guid: 0460e8750cef0df4292f6d2bb56a4843, type: 3}
@@ -1000,17 +1008,16 @@ MonoBehaviour:
   attackTarget: {fileID: 0}
   shootTrack: 1
   invincibleTime: 0
-  totalInvincibleTime: 2
+  totalInvincibleTime: 0
   targetCharacter: {fileID: 0}
   searchTrigger: {fileID: 3566347593191160092}
   targetTypes: 0400000005000000
   canHitFly: 1
+  hurtKeepTime: 0
   foot: {fileID: 8639832132450015562}
   extraRiseGravity: -28.8
   extraFallGravity: -14.4
   moveSpeed: 5
-  hurtKeepTime: 0
-  totalHurtKeepTime: 0.5
   id: 0
   costMp: 60
   searchState: 0

+ 8 - 3
ActionTowerDefense/Assets/Resources/Prefab/Demonic_Giant.prefab

@@ -95,6 +95,8 @@ MonoBehaviour:
   trigedObjs: []
   damage: 0
   force: {x: 0, y: 0, z: 0}
+  changeHurt: 0
+  hurtTime: 0
 --- !u!1 &2460330936527559963
 GameObject:
   m_ObjectHideFlags: 0
@@ -441,10 +443,14 @@ MonoBehaviour:
   - damage: 110
     attackDir: {x: -1, y: 0, z: 0}
     force: 1000
+    changeHurt: 1
+    hurtTime: 1
   attack2Infos:
   - damage: 110
     attackDir: {x: -1, y: 0, z: 0}
     force: 1000
+    changeHurt: 0
+    hurtTime: 0
   attackTriggers:
   - {fileID: 7729941002223262554}
   attackType: 0
@@ -455,17 +461,16 @@ MonoBehaviour:
   attackTarget: {fileID: 0}
   shootTrack: 0
   invincibleTime: 0
-  totalInvincibleTime: 2
+  totalInvincibleTime: 0
   targetCharacter: {fileID: 0}
   searchTrigger: {fileID: 2932762729738363159}
   targetTypes: 0400000005000000
   canHitFly: 0
+  hurtKeepTime: 0
   foot: {fileID: 5440846222604650418}
   extraRiseGravity: -28.8
   extraFallGravity: -14.4
   moveSpeed: 5
-  hurtKeepTime: 0
-  totalHurtKeepTime: 0.5
   id: 0
   costMp: 150
   searchState: 0

+ 8 - 3
ActionTowerDefense/Assets/Resources/Prefab/Demonic_Sword.prefab

@@ -184,10 +184,14 @@ MonoBehaviour:
   - damage: 30
     attackDir: {x: -1, y: 0, z: 0}
     force: 50
+    changeHurt: 1
+    hurtTime: 0.5
   attack2Infos:
   - damage: 30
     attackDir: {x: -1, y: 0, z: 0}
     force: 50
+    changeHurt: 0
+    hurtTime: 0
   attackTriggers:
   - {fileID: 4347565098670608659}
   attackType: 0
@@ -198,17 +202,16 @@ MonoBehaviour:
   attackTarget: {fileID: 0}
   shootTrack: 0
   invincibleTime: 0
-  totalInvincibleTime: 2
+  totalInvincibleTime: 0
   targetCharacter: {fileID: 0}
   searchTrigger: {fileID: 5104552355235513707}
   targetTypes: 0400000005000000
   canHitFly: 0
+  hurtKeepTime: 0
   foot: {fileID: 2437299196663985756}
   extraRiseGravity: -28.8
   extraFallGravity: -14.4
   moveSpeed: 5
-  hurtKeepTime: 0
-  totalHurtKeepTime: 0.5
   id: 0
   costMp: 100
   searchState: 0
@@ -550,6 +553,8 @@ MonoBehaviour:
   trigedObjs: []
   damage: 0
   force: {x: 0, y: 0, z: 0}
+  changeHurt: 0
+  hurtTime: 0
 --- !u!1 &7669620205589286043
 GameObject:
   m_ObjectHideFlags: 0

+ 10 - 3
ActionTowerDefense/Assets/Resources/Prefab/Enemy_Arrow.prefab

@@ -978,16 +978,24 @@ MonoBehaviour:
   - damage: 10
     attackDir: {x: -1, y: 0, z: 0}
     force: 1000
+    changeHurt: 1
+    hurtTime: 0
   - damage: 10
     attackDir: {x: -1, y: 0, z: 0}
     force: 1000
+    changeHurt: 1
+    hurtTime: 0
   - damage: 10
     attackDir: {x: -1, y: 0, z: 0}
     force: 1000
+    changeHurt: 1
+    hurtTime: 0
   attack2Infos:
   - damage: 10
     attackDir: {x: -1, y: 0, z: 0}
     force: 1000
+    changeHurt: 0
+    hurtTime: 0
   attackTriggers: []
   attackType: 1
   bulletPrefab: {fileID: 7473170563405908938, guid: 0460e8750cef0df4292f6d2bb56a4843, type: 3}
@@ -1000,17 +1008,16 @@ MonoBehaviour:
   attackTarget: {fileID: 0}
   shootTrack: 1
   invincibleTime: 0
-  totalInvincibleTime: 2
+  totalInvincibleTime: 0
   targetCharacter: {fileID: 0}
   searchTrigger: {fileID: 3566347593191160092}
   targetTypes: 010000000300000002000000
   canHitFly: 1
+  hurtKeepTime: 0
   foot: {fileID: 8639832132450015562}
   extraRiseGravity: -28.8
   extraFallGravity: -14.4
   moveSpeed: 5
-  hurtKeepTime: 0
-  totalHurtKeepTime: 0.5
   id: 0
   jumpSpeed: 10
   searchState: 0

+ 4 - 1
ActionTowerDefense/Assets/Resources/Prefab/Enemy_Giant.prefab

@@ -95,6 +95,7 @@ MonoBehaviour:
   trigedObjs: []
   damage: 0
   force: {x: 0, y: 0, z: 0}
+  changeHurt: 0
 --- !u!1 &2460330936527559963
 GameObject:
   m_ObjectHideFlags: 0
@@ -441,10 +442,12 @@ MonoBehaviour:
   - damage: 30
     attackDir: {x: -1, y: 0, z: 0}
     force: 1000
+    changeHurt: 1
   attack2Infos:
   - damage: 30
     attackDir: {x: -1, y: 0, z: 0}
     force: 1000
+    changeHurt: 0
   attackTriggers:
   - {fileID: 7729941002223262554}
   attackType: 0
@@ -455,7 +458,7 @@ MonoBehaviour:
   attackTarget: {fileID: 0}
   shootTrack: 0
   invincibleTime: 0
-  totalInvincibleTime: 2
+  totalInvincibleTime: 0
   targetCharacter: {fileID: 0}
   searchTrigger: {fileID: 2932762729738363159}
   targetTypes: 010000000200000003000000

+ 4 - 1
ActionTowerDefense/Assets/Resources/Prefab/Enemy_Sword.prefab

@@ -169,6 +169,7 @@ MonoBehaviour:
   trigedObjs: []
   damage: 0
   force: {x: 0, y: 0, z: 0}
+  changeHurt: 0
 --- !u!1 &2437299196472462361
 GameObject:
   m_ObjectHideFlags: 0
@@ -236,10 +237,12 @@ MonoBehaviour:
   - damage: 30
     attackDir: {x: -1, y: 0, z: 0}
     force: 50
+    changeHurt: 1
   attack2Infos:
   - damage: 30
     attackDir: {x: -1, y: 0, z: 0}
     force: 50
+    changeHurt: 0
   attackTriggers:
   - {fileID: 2280520615464243483}
   attackType: 0
@@ -250,7 +253,7 @@ MonoBehaviour:
   attackTarget: {fileID: 0}
   shootTrack: 0
   invincibleTime: 0
-  totalInvincibleTime: 2
+  totalInvincibleTime: 0
   targetCharacter: {fileID: 0}
   searchTrigger: {fileID: 428784489592146076}
   targetTypes: 010000000300000002000000

+ 5 - 0
ActionTowerDefense/Assets/Resources/Prefab/Player.prefab

@@ -592,15 +592,19 @@ MonoBehaviour:
   - damage: 300
     attackDir: {x: -1, y: 0, z: 0}
     force: 1000
+    changeHurt: 1
   - damage: 300
     attackDir: {x: -1, y: 0, z: 0}
     force: 1000
+    changeHurt: 1
   - damage: 300
     attackDir: {x: -1, y: 0, z: 0}
     force: 1000
+    changeHurt: 1
   - damage: 300
     attackDir: {x: -1, y: 0, z: 0}
     force: 1000
+    changeHurt: 1
   attack2Infos: []
   attackTriggers:
   - {fileID: 1267495056}
@@ -1321,6 +1325,7 @@ MonoBehaviour:
   trigedObjs: []
   damage: 0
   force: {x: 0, y: 0, z: 0}
+  changeHurt: 0
 --- !u!1 &9046555753133816952
 GameObject:
   m_ObjectHideFlags: 0

+ 13 - 5
ActionTowerDefense/Assets/Scenes/SampleScene.unity

@@ -1157,17 +1157,25 @@ PrefabInstance:
     m_TransformParent: {fileID: 0}
     m_Modifications:
     - target: {fileID: 3571941038519084336, guid: 5b538f610930dd743a096c582e2810f4, type: 3}
-      propertyPath: demonicSummonPos.Array.data[0].y
+      propertyPath: attack1Infos.Array.data[0].changeHurt
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 3571941038519084336, guid: 5b538f610930dd743a096c582e2810f4, type: 3}
+      propertyPath: attack1Infos.Array.data[1].changeHurt
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 3571941038519084336, guid: 5b538f610930dd743a096c582e2810f4, type: 3}
+      propertyPath: attack1Infos.Array.data[2].changeHurt
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 3571941038519084336, guid: 5b538f610930dd743a096c582e2810f4, type: 3}
+      propertyPath: attack1Infos.Array.data[3].changeHurt
       value: 0
       objectReference: {fileID: 0}
     - target: {fileID: 3571941038519084344, guid: 5b538f610930dd743a096c582e2810f4, type: 3}
       propertyPath: m_Name
       value: Player
       objectReference: {fileID: 0}
-    - target: {fileID: 3571941038519084344, guid: 5b538f610930dd743a096c582e2810f4, type: 3}
-      propertyPath: m_IsActive
-      value: 1
-      objectReference: {fileID: 0}
     - target: {fileID: 3571941038519084349, guid: 5b538f610930dd743a096c582e2810f4, type: 3}
       propertyPath: m_RootOrder
       value: 1

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

@@ -9,6 +9,8 @@ public class AttackTrigger : MonoBehaviour
     public List<BeHitTrigger> trigedObjs;
     public int damage;
     public Vector3 force;
+    public bool changeHurt;
+    public float hurtTime;
 
     private void Awake()
     {
@@ -34,7 +36,7 @@ public class AttackTrigger : MonoBehaviour
                 trigedObjs.Add(hitTrigger);
                 if (Util.CheckCanHit(owner.tag, hitTrigger.owner.tag) && !hitTrigger.owner.isDie)
                 {
-                    hitTrigger.BeHit(damage, force);
+                    hitTrigger.BeHit(damage, force, changeHurt, hurtTime);
                 }
             }
         }

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

@@ -17,8 +17,8 @@ public class BeHitTrigger : MonoBehaviour
         
     }
 
-    public void BeHit(int damage, Vector3 force)
+    public void BeHit(int damage, Vector3 force, bool changeHurt, float hurtTime)
     {
-        owner.BeHit(damage, force);
+        owner.BeHit(damage, force, changeHurt, hurtTime);
     }
 }

+ 10 - 6
ActionTowerDefense/Assets/Scripts/Bullet.cs

@@ -16,13 +16,15 @@ public class Bullet : MonoBehaviour
     public List<BeHitTrigger> trigedObjs;
     public int damage;
     public float force;
+    public bool changeHurt;
+    public float hurtTime;
     public BulletType bulletType;
     public bool isGetTarget = false;
     public float speed;
     public float maxDistance;
     Vector3 startPos;
     public bool isTrack;
-    public Transform trackTarget;
+    public Character trackTarget;
 
     private void Awake()
     {
@@ -38,15 +40,15 @@ public class Bullet : MonoBehaviour
             gameObject.SetActive(false);
             return;
         }
-        if (isTrack && trackTarget != null)
+        if (isTrack && trackTarget != null && !trackTarget.isDie && trackTarget.gameObject.activeInHierarchy)
         {
-            Vector3 tarDir = (trackTarget.transform.position - transform.position).normalized;
+            Vector3 tarDir = (trackTarget.beSearchTrigger.transform.position - transform.position).normalized;
             transform.right = Vector3.Lerp(transform.right, -tarDir, 0.2f);
             rb.velocity = Vector3.Lerp(rb.velocity, speed * tarDir, 0.2f);
         }
     }
 
-    public void BeShoot(Character own, Vector3 shootPos, Vector3 dir, int dmg, float fc, bool track = false, Transform target = null)
+    public void BeShoot(Character own, Vector3 shootPos, Vector3 dir, int dmg, float fc, bool hurt, float time, bool track = false, Character target = null)
     {
         startPos = shootPos;
         transform.position = shootPos;
@@ -56,6 +58,8 @@ public class Bullet : MonoBehaviour
         owner = own;
         damage = dmg;
         force = fc;
+        changeHurt = hurt;
+        hurtTime = time;
         rb.velocity = dir * speed;
         isTrack = track;
         trackTarget = target;
@@ -92,12 +96,12 @@ public class Bullet : MonoBehaviour
                     switch (bulletType)
                     {
                         case BulletType.Single:
-                            hitTrigger.BeHit(damage, force * (-transform.right));
+                            hitTrigger.BeHit(damage, force * (-transform.right), changeHurt, hurtTime);
                             isGetTarget = true;
                             gameObject.SetActive(false);
                             break;
                         case BulletType.Penetrate:
-                            hitTrigger.BeHit(damage, force * (-transform.right));
+                            hitTrigger.BeHit(damage, force * (-transform.right), changeHurt, hurtTime);
                             break;
                         case BulletType.Bomb:
                             break;

+ 13 - 6
ActionTowerDefense/Assets/Scripts/Character.cs

@@ -66,6 +66,8 @@ public class Character : MonoBehaviour
     public SearchTrigger searchTrigger;
     public List<TargetType> targetTypes;
     public bool canHitFly;
+    [HideInInspector]
+    public float hurtKeepTime;
 
     public virtual void Init()
     {
@@ -111,7 +113,7 @@ public class Character : MonoBehaviour
 
     }
 
-    public virtual void BeHit(int damage, Vector3 force)
+    public virtual void BeHit(int damage, Vector3 force, bool changeHurt, float hurtTime)
     {
         if (invincibleTime > 0)
         {
@@ -119,13 +121,15 @@ public class Character : MonoBehaviour
         }
         hp -= damage;
         uiHp.Show(hp, totalHp);
-        rb.AddForce(force);
-        if (hp < 0)
+        if (hp <= 0)
         {
+            rb.AddForce(force);
             ChangeState(CharacterState.Die);
         }
-        else
+        else if (changeHurt)
         {
+            rb.AddForce(force);
+            hurtKeepTime = hurtTime;
             ChangeState(CharacterState.Hurt);
         }
     }
@@ -143,13 +147,12 @@ public class Character : MonoBehaviour
         }
         GameObject bulletObj = PoolManager.Instantiate(bulletPrefab);
         Bullet bullet = bulletObj.GetComponent<Bullet>();
-        bullet.damage = attackInfo.damage;
         Vector3 attackDir = attackInfo.attackDir.normalized;
         if (bodyTrans.localScale.x < 0)
         {
             attackDir.x = -attackDir.x;
         }
-        bullet.BeShoot(this, shootPos[shootId].position, attackDir, attackInfo.damage, attackInfo.force, shootTrack, attackTarget?attackTarget.beSearchTrigger.transform:null);
+        bullet.BeShoot(this, shootPos[shootId].position, attackDir, attackInfo.damage, attackInfo.force, attackInfo.changeHurt, attackInfo.hurtTime, shootTrack, attackTarget?attackTarget:null);
     }
 
     public virtual Vector3 GetMoveDir()
@@ -185,6 +188,8 @@ public class Character : MonoBehaviour
                 for (int i = 0; i < attack1Infos.Count; i++)
                 {
                     attackTriggers[i].damage = attack1Infos[i].damage;
+                    attackTriggers[i].changeHurt = attack1Infos[i].changeHurt;
+                    attackTriggers[i].hurtTime = attack1Infos[i].hurtTime;
                     Vector3 attackDir = attack1Infos[i].attackDir.normalized;
                     if (bodyTrans.localScale.x < 0)
                     {
@@ -228,6 +233,8 @@ public class Character : MonoBehaviour
                 for (int i = 0; i < attack2Infos.Count; i++)
                 {
                     attackTriggers[i].damage = attack2Infos[i].damage;
+                    attackTriggers[i].changeHurt = attack2Infos[i].changeHurt;
+                    attackTriggers[i].hurtTime = attack2Infos[i].hurtTime;
                     Vector3 attackDir = attack2Infos[i].attackDir.normalized;
                     if (bodyTrans.localScale.x < 0)
                     {

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

@@ -398,7 +398,6 @@ public class Demonic : MoveCharacter
             case CharacterState.Hurt:
                 ani.Play("hitted", 0, 0);
                 aniCollider.Play("Hurt", 0, 0);
-                hurtKeepTime = totalHurtKeepTime;
                 invincibleTime = totalInvincibleTime;
                 //ani.Play("Invincible", 2, 0);
                 break;

+ 0 - 1
ActionTowerDefense/Assets/Scripts/Enemy.cs

@@ -338,7 +338,6 @@ public class Enemy : MoveCharacter
             case CharacterState.Hurt:
                 ani.Play("hitted", 0, 0);
                 aniCollider.Play("Hurt", 0, 0);
-                hurtKeepTime = totalHurtKeepTime;
                 invincibleTime = totalInvincibleTime;
                 //ani.Play("Invincible", 2, 0);
                 break;

+ 2 - 2
ActionTowerDefense/Assets/Scripts/EnemyTower.cs

@@ -108,11 +108,11 @@ public class EnemyTower : Character
         }
     }
 
-    public override void BeHit(int damage, Vector3 force)
+    public override void BeHit(int damage, Vector3 force, bool changeHurt, float hurtTime)
     {
         hp -= damage;
         uiHp.Show(hp, totalHp);
-        if (hp < 0)
+        if (hp <= 0)
         {
             ChangeState(CharacterState.Die);
         }

+ 0 - 3
ActionTowerDefense/Assets/Scripts/MoveCharacter.cs

@@ -10,7 +10,4 @@ public class MoveCharacter : Character
     public float extraFallGravity = -10; //ÏÂÂäʱ¶îÍâÖØÁ¦¼ÓËÙ¶È
     public float moveSpeed = 5;
 
-    [HideInInspector]
-    public float hurtKeepTime;
-    public float totalHurtKeepTime = 0.5f;
 }

+ 2 - 1
ActionTowerDefense/Assets/Scripts/PlayerController.cs

@@ -18,6 +18,8 @@ public struct AttackInfo
     public int damage;
     public Vector3 attackDir;
     public float force;
+    public bool changeHurt;
+    public float hurtTime;
 }
 
 public enum PlayerAttackState
@@ -867,7 +869,6 @@ public class PlayerController : MoveCharacter
             case CharacterState.Hurt:
                 aniCollider.Play("Hurt", 0, 0);
                 ani.Play("hitted", 0, 0);
-                hurtKeepTime = totalHurtKeepTime;
                 invincibleTime = totalInvincibleTime;
                 //ani.Play("Invincible", 2, 0);
                 break;

+ 2 - 2
ActionTowerDefense/Assets/Scripts/Tower.cs

@@ -109,11 +109,11 @@ public class Tower : Character
         }
     }
 
-    public override void BeHit(int damage, Vector3 force)
+    public override void BeHit(int damage, Vector3 force, bool changeHurt, float hurtTime)
     {
         hp -= damage;
         uiHp.Show(hp, totalHp);
-        if (hp < 0)
+        if (hp <= 0)
         {
             ChangeState(CharacterState.Die);
         }