Kaynağa Gözat

风车手里剑忍者暂存

1243896040 1 hafta önce
ebeveyn
işleme
176794886d

+ 22 - 8
ActionTowerDefense/Assets/Resources/Prefab/ESpirits/ESpirits_Pinja.prefab

@@ -66,7 +66,7 @@ BoxCollider:
   m_IsTrigger: 1
   m_Enabled: 1
   serializedVersion: 2
-  m_Size: {x: 21.102495, y: 25, z: 20}
+  m_Size: {x: 40, y: 25, z: 20}
   m_Center: {x: 0, y: 6, z: 0}
 --- !u!1 &1090663073729466903
 GameObject:
@@ -209,7 +209,9 @@ MonoBehaviour:
       criticalChance: 0
       criticalStrikeEffect: 0
       lifesteal: 0
-      effect: {fileID: 0}
+      attackOnEffect: {fileID: 0}
+      attackOnEffectPos: {fileID: 0}
+      hitEffect: {fileID: 0}
       attackEffect: 
       attackMethod_Type: 0
       floatState:
@@ -255,8 +257,8 @@ MonoBehaviour:
       sustainedInjury:
         damage: 0
     attackTrigger: {fileID: 4347565098670608659}
-    needToChange: 1
-    attackDistance: 1
+    needToChange: 0
+    attackDistance: 15
     maxAttackDis: 15
     minAttackDis: 9
     searchMode: 0
@@ -279,7 +281,9 @@ MonoBehaviour:
       criticalChance: 0
       criticalStrikeEffect: 0
       lifesteal: 0
-      effect: {fileID: 0}
+      attackOnEffect: {fileID: 0}
+      attackOnEffectPos: {fileID: 0}
+      hitEffect: {fileID: 0}
       attackEffect: 
       attackMethod_Type: 0
       floatState:
@@ -844,7 +848,9 @@ MonoBehaviour:
       criticalChance: 0
       criticalStrikeEffect: 0
       lifesteal: 0
-      effect: {fileID: 0}
+      attackOnEffect: {fileID: 0}
+      attackOnEffectPos: {fileID: 0}
+      hitEffect: {fileID: 0}
       attackEffect: 
       attackMethod_Type: 0
       floatState:
@@ -1292,7 +1298,9 @@ MonoBehaviour:
       criticalChance: 0
       criticalStrikeEffect: 0
       lifesteal: 0
-      effect: {fileID: 0}
+      attackOnEffect: {fileID: 0}
+      attackOnEffectPos: {fileID: 0}
+      hitEffect: {fileID: 0}
       attackEffect: 
       attackMethod_Type: 0
       floatState:
@@ -1408,7 +1416,9 @@ MonoBehaviour:
       criticalChance: 0
       criticalStrikeEffect: 0
       lifesteal: 0
-      effect: {fileID: 0}
+      attackOnEffect: {fileID: 0}
+      attackOnEffectPos: {fileID: 0}
+      hitEffect: {fileID: 0}
       attackEffect: 
       attackMethod_Type: 0
       floatState:
@@ -1594,7 +1604,11 @@ MonoBehaviour:
   m_EditorClassIdentifier: 
   owner: {fileID: 9191678810110905539}
   bulletObj: {fileID: 7473170563405908938, guid: a8d7788d84e74054e9bd5fc742e22241, type: 3}
+  bulletNum: 3
+  angleRange: 45
+  isOut: 0
   isReturning: 0
+  outBullet: {fileID: 0}
 --- !u!1001 &4975682865987921505
 PrefabInstance:
   m_ObjectHideFlags: 0

+ 6 - 4
ActionTowerDefense/Assets/Resources/Prefab/windmill_shuriken.prefab

@@ -423,7 +423,6 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 9a4a2dbc1e482cd4b9f1532e1fddcb30, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  stopTime: 1.5
   isBulletMove: 1
   owner: {fileID: 0}
   attackMethod:
@@ -501,10 +500,13 @@ MonoBehaviour:
   rb: {fileID: 0}
   trigedObjs: []
   bulletType: 3
-  backTime: 0
+  stopTime: 5
+  backDuration: 1
+  stopDuration: 2
+  BoomerangWeaponController: {fileID: 0}
   isGetTarget: 0
-  speed: 20
-  maxFlyTime: 2
+  speed: 30
+  maxFlyTime: 3.5
   flyTime: 0
   trackTarget: {fileID: 0}
   effect: {fileID: 417478504669294145, guid: 144eaa8f77ac17143836e4b78fedb9c3, type: 3}

+ 29 - 2
ActionTowerDefense/Assets/Scripts/Bullet.cs

@@ -16,7 +16,7 @@ public enum BulletType
 
 public class Bullet : MonoBehaviour
 {
-    public float stopTime;
+    
     public bool isBulletMove = true;
     
     [Header("组件")]
@@ -25,8 +25,15 @@ public class Bullet : MonoBehaviour
     public Rigidbody rb;
     public List<BeHitTrigger> trigedObjs;
     public BulletType bulletType;
+    [ShowIf("@bulletType == BulletType.Throw")]
+    public float stopTime;
     [ShowIf("@bulletType == BulletType.Boomerang")] 
-    [LabelText("返回时间")] public float backDuration;
+    [LabelText("回旋镖移动时间")] public float backDuration;
+    [ShowIf("@bulletType == BulletType.Boomerang")]
+    [LabelText("停留时间")] public float stopDuration;
+    [ShowIf("@bulletType == BulletType.Boomerang")]
+    [DisplayOnly] public BoomerangWeaponController BoomerangWeaponController;
+    private Vector3 originalPos;
 
     public bool isGetTarget = false;
     public float speed;
@@ -59,6 +66,7 @@ public class Bullet : MonoBehaviour
     [FoldoutGroup("条件")] [LabelText("是否能穿过地面")] public bool canPassGround;
 
     public Vector3 originalScale;
+    private Vector3 dir;
 
     private void Awake()
     {
@@ -94,6 +102,24 @@ public class Bullet : MonoBehaviour
         }
         if (isTrack && trackTarget != null && !trackTarget.isDie && trackTarget.gameObject.activeInHierarchy)
         {
+            if (bulletType == BulletType.Boomerang)
+            {
+                float addTime = backDuration + stopDuration;
+                if (flyTime >= addTime)
+                {
+                    transform.position = Vector3.Lerp(originalPos, BoomerangWeaponController.transform.position, (flyTime - addTime) /(maxFlyTime - addTime));
+                }
+                else if(flyTime >= backDuration)
+                {
+                    rb.velocity = Vector3.zero;
+                    originalPos = transform.position;
+                }
+                else
+                {
+                    rb.velocity = dir * speed * ( 1 - flyTime / backDuration);
+                }
+                
+            }
             if (canAlwaysTrack)
             {
                 Vector3 tarDir = (trackTarget.beSearchTrigger.transform.position - transform.position).normalized;
@@ -118,6 +144,7 @@ public class Bullet : MonoBehaviour
 
         isTrack = aim;
         rb.velocity = dir * speed;
+        this.dir = dir;
         trackTarget = target;
         owner = own;
         if (isTrack && trackTarget != null && !trackTarget.isDie && trackTarget.gameObject.activeInHierarchy)

+ 2 - 2
ActionTowerDefense/Assets/Scripts/Conduct/FanFlyingSwords.cs

@@ -17,9 +17,9 @@ public class FanFlyingSwords : MonoBehaviour
         float angleInterval = angleRange / (float)(swordsNum - 1);
         for (int i = 0; i < swordsNum; i++)
         {
-            float angle = 0;
+            float angle;
             GameObject obj = PoolManager.Instantiate(sword);
-            Vector3 dir = Vector3.zero;
+            Vector3 dir;
             if(owner.bodyTrans.localScale.x > 0)
             {
                 angle = 180 - arrivalAngle - angleRange/2 + i * angleInterval;

+ 46 - 6
ActionTowerDefense/Assets/Scripts/Skills/BoomerangWeaponController.cs

@@ -6,8 +6,21 @@ using UnityEngine;
 public class BoomerangWeaponController : SpecialSkills
 {
     [LabelText("子弹预制体")] public GameObject bulletObj;
-
+    [LabelText("子弹数量")] public int bulletNum;
+    [LabelText("角度")] public float angleRange;
+    
+    [DisplayOnly] public bool isOut;
     [DisplayOnly] public bool isReturning;
+    [DisplayOnly] public Bullet outBullet;
+    public void Awake()
+    {
+        Init();
+    }
+    public void Init()
+    {
+        isReturning = false;
+        isOut = false;
+    }
     public override void Attack()
     {
         base.Attack();
@@ -17,13 +30,40 @@ public class BoomerangWeaponController : SpecialSkills
 
     private void Update()
     {
-
+        if(isOut && !isReturning)
+        {
+            if (!outBullet.gameObject.activeSelf)
+            {
+                isReturning = true;
+            }
+        }
     }
     public void Shoot()
     {
-        Bullet bullet = PoolManager.Instantiate(bulletObj).GetComponent<Bullet>();
-        AttackController.AttackMethod attackMethod = owner.attackController.attackMethod_march[0];
-        Vector3 attackDir = (owner.targetCharacter.beSearchTrigger.transform.position - transform.position).normalized;
-        bullet.BeShoot(owner, transform.position, attackDir, true, target: owner.targetCharacter);
+        float angleInterval = angleRange / (bulletNum - 1);
+        for (int i = 0; i < bulletNum; i++)
+        {
+            float angle;
+            Bullet bullet = PoolManager.Instantiate(bulletObj).GetComponent<Bullet>();
+            bullet.BoomerangWeaponController = this;
+            if (i == 0)
+            {
+                outBullet = bullet;
+            }
+            Vector3 dir;
+            if (owner.targetCharacter.beSearchTrigger.transform.position.x - transform.position.x > 0)
+            {
+                angle = i * angleInterval;
+                
+            }
+            else
+            {
+                angle = 180 - i * angleInterval;
+            }
+            angle = angle / 180 * Mathf.PI;
+            dir = new Vector3(Mathf.Cos(angle), Mathf.Sin(angle), 0);
+            bullet.BeShoot(owner, transform.position, dir, true, target: owner.targetCharacter);
+        }
+        isOut = true;
     }
 }

+ 21 - 0
ActionTowerDefense/Assets/Scripts/Spirits/ESpirits_Pinja.cs

@@ -13,6 +13,7 @@ public class ESpirits_Pinja : Enemy
     [ShowIf("canRevives")] [LabelText("¸´»î·¶Î§")] public Vector2 revivesPos;
 
     private PlayerController player;
+    private BoomerangWeaponController boomerangWeaponController;
     public override void Init()
     {
         base.Init();
@@ -27,6 +28,7 @@ public class ESpirits_Pinja : Enemy
         }
         player = PlayersInput.instance[0];
         ChooseLockingTarget();
+        boomerangWeaponController = attackController.attackMethod_march[0].skill as BoomerangWeaponController;
     }
 
     public override void OnState()
@@ -58,6 +60,19 @@ public class ESpirits_Pinja : Enemy
                     transform.position = revivesPos;
                 }
                 return;
+            case CharacterState.Attack:
+                attackController.attackTime = 1;
+                if (boomerangWeaponController.isReturning && boomerangWeaponController.isOut)
+                {
+                    boomerangWeaponController.Init();
+                    if (GetAttack())
+                    {
+                        isConAttack = true;
+                    }
+                    ChangeState(CharacterState.Idle);
+                    return;
+                }
+                break;
         }
         base.OnState();
     }
@@ -70,6 +85,12 @@ public class ESpirits_Pinja : Enemy
                 ChooseLockingTarget();
                 break;
         }
+        switch (newState)
+        {
+            case CharacterState.Attack:
+                ChooseLockingTarget();
+                break;
+        }
         base.ChangeState(newState);
     }