Ver Fonte

- 游龙球

WGL há 1 mês atrás
pai
commit
af275b584d

+ 2 - 0
ActionTowerDefense/Assets/Resources/Prefab/Conduct/DragonController.prefab

@@ -45,6 +45,8 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   distance: 1
+  totalTime: 10
+  time: 0
   baseSortingOrder: 9000
   num: 0
   damage: 0

+ 140 - 18
ActionTowerDefense/Assets/Resources/Prefab/MySoldier/Demonic_Arrow.prefab

@@ -600,7 +600,6 @@ GameObject:
   m_Component:
   - component: {fileID: 3215317859961215224}
   - component: {fileID: 7144185533164728569}
-  - component: {fileID: 4793313414059827227}
   m_Layer: 7
   m_Name: BodyCollider
   m_TagString: Untagged
@@ -636,19 +635,6 @@ BoxCollider:
   serializedVersion: 2
   m_Size: {x: 0.81, y: 1.6836002, z: 2}
   m_Center: {x: 0, y: 0.83019984, z: 0}
---- !u!114 &4793313414059827227
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 2616922587087395095}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 09d9abdbf4c198446ba545e23d3f9c48, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  haveCollisionDamage: 0
 --- !u!1 &2623922659733331491
 GameObject:
   m_ObjectHideFlags: 0
@@ -725,6 +711,144 @@ MonoBehaviour:
   m_FillOrigin: 0
   m_UseSpriteMesh: 0
   m_PixelsPerUnitMultiplier: 1
+--- !u!1 &3024798155107500867
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 2452086777756676099}
+  - component: {fileID: 4247853911529852454}
+  - component: {fileID: 4619289108872985744}
+  m_Layer: 20
+  m_Name: DragonTrigger
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!4 &2452086777756676099
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3024798155107500867}
+  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: 6561999689701501378}
+  m_RootOrder: 8
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!65 &4247853911529852454
+BoxCollider:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3024798155107500867}
+  m_Material: {fileID: 13400000, guid: ae11ca82bc783194e8fdded3f8828a76, type: 2}
+  m_IsTrigger: 1
+  m_Enabled: 1
+  serializedVersion: 2
+  m_Size: {x: 0.81, y: 1.6836002, z: 2}
+  m_Center: {x: 0, y: 0.83019984, z: 0}
+--- !u!114 &4619289108872985744
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3024798155107500867}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 5eaed0a6b9d6fc6409bef80cf41a0a8e, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  canBreakWall: 0
+  wallBrealNum: 10
+  isShoot: 0
+  owner: {fileID: 0}
+  isSingleAttack: 0
+  cantSingleAttack: 0
+  trigedObjs: []
+  attackMethod:
+    attackName: 
+    attackType: 0
+    attackInfo:
+      attackValue: 0
+      damage: 0
+      attackDir: {x: 0, y: 0, z: 0}
+      criticalChance: 0
+      lifesteal: 0
+      effect: {fileID: 7473170563405908938, guid: 8ad3c225050205945b10657aa300afd6, type: 3}
+      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
+  force: {x: 0, y: 0, z: 0}
+  changeHurt: 0
+  repelValue: 0
+  offsetY: 1
+  hitRate: 1
+  isCreatedByDemonicSummon: 0
 --- !u!1 &3041216575519132682
 GameObject:
   m_ObjectHideFlags: 0
@@ -1061,6 +1185,7 @@ Transform:
   - {fileID: 8482269351142858204}
   - {fileID: 776105162125788029}
   - {fileID: 6220414675483084992}
+  - {fileID: 2452086777756676099}
   m_Father: {fileID: 5769591908339262981}
   m_RootOrder: 1
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -1442,14 +1567,11 @@ MonoBehaviour:
   electrifyAttackSpeedScale: 0.6
   electrifyMoveSpeedScale: 0.6
   isElectrify: 0
-  isPetrify: 0
-  petrifyTime: 0
-  petrifyHp: 0
   isOnFire: 0
   fireStacks: 0
   searchState: 0
   bigSoldier: {fileID: 8684670505913003432}
-  dragonTrigger: {fileID: 4793313414059827227}
+  dragonTrigger: {fileID: 4619289108872985744}
   myName: "\u98DE\u5251"
   summonEndToDie: 0
   canSizeChange: 0

+ 1 - 18
ActionTowerDefense/Assets/Resources/Prefab/MySoldier/Demonic_Giant.prefab

@@ -496,7 +496,6 @@ GameObject:
   m_Component:
   - component: {fileID: 5669356131851076493}
   - component: {fileID: 133524724615536217}
-  - component: {fileID: 7855244179185678730}
   m_Layer: 7
   m_Name: BodyCollider
   m_TagString: Untagged
@@ -533,19 +532,6 @@ CapsuleCollider:
   m_Height: 2.47
   m_Direction: 0
   m_Center: {x: 0, y: 1.16, z: 0}
---- !u!114 &7855244179185678730
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 4543619153787591511}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 09d9abdbf4c198446ba545e23d3f9c48, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  haveCollisionDamage: 0
 --- !u!1 &5041915139224979942
 GameObject:
   m_ObjectHideFlags: 0
@@ -815,14 +801,11 @@ MonoBehaviour:
   electrifyAttackSpeedScale: 0.6
   electrifyMoveSpeedScale: 0.6
   isElectrify: 0
-  isPetrify: 0
-  petrifyTime: 0
-  petrifyHp: 0
   isOnFire: 0
   fireStacks: 0
   searchState: 0
   bigSoldier: {fileID: 1496688819680216204}
-  dragonTrigger: {fileID: 7855244179185678730}
+  dragonTrigger: {fileID: 0}
   myName: "\u76FE\u7532\u5175"
   summonEndToDie: 0
   canSizeChange: 0

+ 1 - 18
ActionTowerDefense/Assets/Resources/Prefab/MySoldier/Demonic_Sword.prefab

@@ -412,14 +412,11 @@ MonoBehaviour:
   electrifyAttackSpeedScale: 0.6
   electrifyMoveSpeedScale: 0.6
   isElectrify: 0
-  isPetrify: 0
-  petrifyTime: 0
-  petrifyHp: 0
   isOnFire: 0
   fireStacks: 0
   searchState: 0
   bigSoldier: {fileID: 1119516841680091051}
-  dragonTrigger: {fileID: 853215740739982155}
+  dragonTrigger: {fileID: 0}
   myName: "\u6797\u51B2"
   summonEndToDie: 0
   canSizeChange: 0
@@ -1601,7 +1598,6 @@ GameObject:
   m_Component:
   - component: {fileID: 1724031848734634463}
   - component: {fileID: 5749055005940368668}
-  - component: {fileID: 853215740739982155}
   m_Layer: 7
   m_Name: BodyCollider
   m_TagString: Untagged
@@ -1638,19 +1634,6 @@ CapsuleCollider:
   m_Height: 1.49
   m_Direction: 0
   m_Center: {x: 0, y: 0.65020585, z: 0}
---- !u!114 &853215740739982155
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 8367450352918568419}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 09d9abdbf4c198446ba545e23d3f9c48, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  haveCollisionDamage: 0
 --- !u!1 &8769150919382874379
 GameObject:
   m_ObjectHideFlags: 0

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

@@ -10,7 +10,7 @@ public class Demonic : MoveCharacter
 {
     [FoldoutGroup("组件")] [DisplayOnly]public SearchState searchState;
     [FoldoutGroup("组件")] public BigSoldier bigSoldier;
-    [FoldoutGroup("组件")] public DragonTrigger dragonTrigger;
+    [FoldoutGroup("组件")] public AttackTrigger dragonTrigger;
 
     [FoldoutGroup("角色信息")] public string myName;
 

+ 42 - 1
ActionTowerDefense/Assets/Scripts/Conduct/DragonController.cs

@@ -6,6 +6,8 @@ using UnityEngine;
 public class DragonController : MonoBehaviour
 {
     [LabelText("¼ä¸ô")] public float distance;
+    [LabelText("ʱ¼ä")] public float totalTime;
+    public float time;
     public int baseSortingOrder; 
     public int num;
     public int damage;
@@ -18,6 +20,12 @@ public class DragonController : MonoBehaviour
 
     public void Update()
     {
+        time -= Time.deltaTime;
+        if(time <= 0)
+        {
+            End();
+            return;
+        }
         Vector3 pos = player.transform.position + playerOffset;
         if(Vector3.Distance(pos, targetPoss[0]) >= distance)
         {
@@ -31,9 +39,38 @@ public class DragonController : MonoBehaviour
             {
                 targetPoss[i + 1] = demonicPos;
             }
+            float dir = (targetPoss[i] - demonicPos).x;
+            if (dir > 0)
+            {
+                if (demonic.bodyTrans.localScale.x > 0)
+                {
+                    demonic.Turn();
+                }
+            }
+            else
+            {
+                if (demonic.bodyTrans.localScale.x < 0)
+                {
+                    demonic.Turn();
+                }
+            }
             demonic.transform.position = Vector3.Lerp(demonicPos, targetPoss[i], lerpValue * Time.deltaTime);
         }
     }
+
+    public void End()
+    {
+        for(int i = 0; i < demonics.Count; i++)
+        {
+            Demonic demonic = demonics[i];
+            demonic.ignoresOnState = false;
+            demonic.beHitTrigger.gameObject.SetActive(true);
+            demonic.beSearchTrigger.gameObject.SetActive(true);
+            demonic.dragonTrigger.gameObject.SetActive(false);
+            demonic.gameObject.SetActive(false);
+        }
+        gameObject.SetActive(false);
+    }
     public void Init()
     {
         Vector3 offset = Vector3.zero;
@@ -57,6 +94,7 @@ public class DragonController : MonoBehaviour
             demonics.Add(demonic);
             targetPoss.Add(demonic.transform.position);
         }
+        time = totalTime;
     }
 
     public Demonic CreateDemonic()
@@ -66,9 +104,12 @@ public class DragonController : MonoBehaviour
         Demonic demonic = demonicObj.GetComponent<Demonic>();
         float dir = player.bodyTrans.localScale.x;
         demonic.ignoresOnState = true;
-        demonic.dragonTrigger.haveCollisionDamage = true;
+        AttackTrigger dragonTrigger = demonic.dragonTrigger;
+        dragonTrigger.gameObject.SetActive(true);
+        dragonTrigger.attackMethod = demonic.attackController.attackMethod_summon[0];
         demonic.beHitTrigger.gameObject.SetActive(false);
         demonic.beSearchTrigger.gameObject.SetActive(false);
+        demonic.ani.Play(AnimatorHash.ANIMATOR_walk, 0, 0);
         Vector3 offset = player.demonicSummonPos[demonicId];
         if (dir > 0)
         {

+ 49 - 1
ActionTowerDefense/Assets/Scripts/Conduct/DragonTrigger.cs

@@ -4,5 +4,53 @@ using UnityEngine;
 
 public class DragonTrigger : MonoBehaviour
 {
-    public bool haveCollisionDamage;
+    public Character owner;
+    public List<BeHitTrigger> trigedObjs;
+    public AttackController.AttackMethod attackMethod;
+
+    protected virtual void OnTriggerEnter(Collider other)
+    {
+        if (!other.TryGetComponent(out BeHitTrigger hitTrigger)) return;
+
+        Character hitOwner = hitTrigger.owner;
+        if (hitOwner == null || hitOwner.isDie) return;
+
+        AttackController attackController = owner.attackController;
+        if (!TryGetTargetTypeFromTag(hitOwner.tag, out TargetType otherTargetType)) return;
+
+        if (!IsValidTargetType(attackController.targetTypes, otherTargetType)) return;
+
+        trigedObjs.Add(hitTrigger);
+        hitTrigger.BeHit(attackMethod, owner);
+
+        if (owner.TryGetComponent(out Demonic demonic))
+        {
+            hitTrigger.attackerID = demonic.id;
+        }
+    }
+
+    private HashSet<TargetType> _cachedTargetTypes;
+    private List<TargetType> _lastTargetTypes;
+
+    private bool IsValidTargetType(List<TargetType> targetTypes, TargetType checkType)
+    {
+        // 如果列表没有变化,使用缓存的HashSet
+        if (targetTypes != _lastTargetTypes)
+        {
+            _cachedTargetTypes = new HashSet<TargetType>(targetTypes);
+            _lastTargetTypes = targetTypes;
+        }
+
+        return _cachedTargetTypes.Contains(checkType);
+    }
+
+    private bool TryGetTargetTypeFromTag(string tag, out TargetType targetType)
+    {
+        return GameManager.TagToTargetTypeMap.TryGetValue(tag, out targetType);
+    }
+
+    protected virtual void OnEnable()
+    {
+        trigedObjs.Clear();
+    }
 }