Quellcode durchsuchen

黑伞提示特效;boss切换蝌蚪形态

SZAND\msx_2 vor 2 Monaten
Ursprung
Commit
435628fb72

+ 5 - 2
ActionTowerDefense/Assets/Resources/Prefab/Boss/WaterSprite/Boss_Umbrella.prefab

@@ -215,7 +215,6 @@ MonoBehaviour:
   canBreakWall: 0
   wallBrealNum: 10
   isShoot: 0
-  type: 0
   owner: {fileID: 0}
   isSingleAttack: 0
   cantSingleAttack: 0
@@ -224,7 +223,9 @@ MonoBehaviour:
     attackValue: 0
     damage: 100
     attackDir: {x: 0, y: 0, z: 0}
+    effect: {fileID: 0}
     attackEffect: 
+    attackMethod_Type: 0
     floatState:
       time: 0
       upTime: {x: 0, y: 0}
@@ -265,7 +266,6 @@ MonoBehaviour:
       rate: 0
     sustainedInjury:
       damage: 0
-    isDemSummon: 0
   force: {x: 0, y: 0, z: 0}
   changeHurt: 0
   repelValue: 0
@@ -10212,3 +10212,6 @@ MonoBehaviour:
   stayTime: 2
   backTime: 1.5
   disappearTime: 0.2
+  effect: {fileID: 7473170563405908938, guid: 8d195dec6a5551844ba6e4a0a4af3b59, type: 3}
+  leftX: -9
+  rightX: 9

+ 0 - 0
ActionTowerDefense/Assets/Resources/Prefab/Effc_umbralla_alarm.prefab → ActionTowerDefense/Assets/Resources/Prefab/Boss/WaterSprite/Effc_umbralla_alarm.prefab


+ 0 - 0
ActionTowerDefense/Assets/Resources/Prefab/Effc_umbralla_alarm.prefab.meta → ActionTowerDefense/Assets/Resources/Prefab/Boss/WaterSprite/Effc_umbralla_alarm.prefab.meta


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

@@ -310,6 +310,9 @@ public class Boss : MoveCharacter
         }
         switch (state)
         {
+            case CharacterState.Attack:
+                ClearAllSkills();
+                break;
             case CharacterState.Run:
                 rb.velocity = Vector3.zero;
                 break;

+ 53 - 1
ActionTowerDefense/Assets/Scripts/Boss/WaterGhost/BlackUmbrella.cs

@@ -55,6 +55,11 @@ public class BlackUmbrella : MonoBehaviour
     private bool hasBackAni;
     [LabelText("黑伞消失时长")]
     public float disappearTime;
+    [LabelText("黑伞位置提示特效")]
+    public GameObject effect;
+    private GameObject effectIns;
+    //提示X坐标
+    public float leftX, rightX;
 
     //是第一次攻击,则无需索敌
     private bool isFirst;
@@ -80,7 +85,7 @@ public class BlackUmbrella : MonoBehaviour
         ChangeUmbrellaState(UmbrellaState.appear);
     }
 
-    private void ChangeUmbrellaState(UmbrellaState us)
+    public void ChangeUmbrellaState(UmbrellaState us)
     {
         if (umbrellaState == us)
         {
@@ -194,8 +199,55 @@ public class BlackUmbrella : MonoBehaviour
         }
     }
 
+    private bool IsTargetVisible(GameObject target)
+    {
+        Camera camera = Camera.main;
+        // 获取物体在视口中的位置(归一化坐标)
+        Vector3 viewportPoint = camera.WorldToViewportPoint(target.transform.position);
+
+        // 检查坐标是否在屏幕范围内(0-1之间)
+        bool inCameraView = viewportPoint.x >= 0 && viewportPoint.x <= 1 &&
+                           viewportPoint.y >= 0 && viewportPoint.y <= 1 &&
+                           viewportPoint.z > 0; // z>0 表示在相机前方
+
+        return inCameraView;
+    }
+
+    private void ShowTip()
+    {
+        if (!effectIns)
+        {
+            effectIns = PoolManager.Instantiate(effect, Camera.main.transform);
+        }
+        if (!IsTargetVisible(gameObject))
+        {
+            if (gameObject.transform.position.x > pc.transform.position.x)
+            {
+                effectIns.transform.localPosition = new Vector3(rightX, 0, 16);
+                Vector3 pos = effectIns.transform.position;
+                pos.y = gameObject.transform.position.y;
+                effectIns.transform.position = pos;
+                effectIns.transform.localEulerAngles = new Vector3(0.8f, 0.1f, 1);
+            }
+            else
+            {
+                effectIns.transform.localPosition = new Vector3(leftX, 0, 16);
+                Vector3 pos = effectIns.transform.position;
+                pos.y = gameObject.transform.position.y;
+                effectIns.transform.position = pos;
+                effectIns.transform.localEulerAngles = new Vector3(-0.8f, 0.1f, 1);
+            }
+            effectIns.SetActive(true);
+        }
+        else
+        {
+            effectIns.SetActive(false);
+        }
+    }
+
     private void Update()
     {
         OnUmbrellaState();
+        ShowTip();
     }
 }

+ 19 - 8
ActionTowerDefense/Assets/Scripts/Boss/WaterGhost/WaterSprite.cs

@@ -79,15 +79,24 @@ public class WaterSprite : Boss
         switch (bs)
         {
             case BossStage.waterSprite:
+                if (changeHPID < changeStateHPPer.Length - 1)
+                {
+                    nextAimHP = (int)(changeStateHPPer[changeHPID] / 100f * totalHp);
+                    changeHPID++;
+                }
+                else
+                {
+                    nextAimHP = -1000;
+                }
+                bodyTrans.gameObject.SetActive(true);
+                //所有蝌蚪消失
+                pws.AllPoliDie();
+                break;
+            case BossStage.polliwog:
                 bodyTrans.gameObject.SetActive(false);
                 //在原地召唤一堆蝌蚪
                 pws.Shoot(polliNum, bodyTrans.position);
                 break;
-            case BossStage.polliwog:
-                //所有蝌蚪消失
-                pws.AllPoliDie();
-                bodyTrans.gameObject.SetActive(true);
-                break;
             default:
                 break;
         }
@@ -98,13 +107,11 @@ public class WaterSprite : Boss
         switch (curBossStage)
         {
             case BossStage.polliwog:
-                print(1);
                 pastPoliTime += Time.deltaTime;
                 if (pastPoliTime >= polliTime)
                 {
                     ChangeStage(BossStage.waterSprite);
                     pastPoliTime = 0;
-                    print(2);
                 }
                 break;
         }
@@ -172,7 +179,11 @@ public class WaterSprite : Boss
 
     public override void ClearAllSkills()
     {
-        attack.umbrellaInstance.SetActive(false);
+        GameObject umbrella = attack.umbrellaInstance;
+        if (umbrella)
+        {
+            umbrella.SetActive(false);
+        }
     }
 
     public override void OnAttack()