소스 검색

boss血量逻辑1.0

SZAND\msx_2 1 년 전
부모
커밋
31094e72ec

+ 36 - 10
ActionTowerDefense/Assets/Resources/Prefab/Boss/Boss_YuMenGuan.prefab

@@ -88,7 +88,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 1
+  m_IsActive: 0
 --- !u!4 &5561381424608522018
 Transform:
   m_ObjectHideFlags: 0
@@ -251,7 +251,10 @@ MonoBehaviour:
   joint: {fileID: 0}
   rope: {fileID: 0}
   beLarger: 0
+  toLargeSize: 0
   cookEffect: {fileID: 0}
+  boss: {fileID: 0}
+  isCore: 0
 --- !u!1 &650183981426157255
 GameObject:
   m_ObjectHideFlags: 0
@@ -307,7 +310,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 1
+  m_IsActive: 0
 --- !u!4 &6861142414981743174
 Transform:
   m_ObjectHideFlags: 0
@@ -470,7 +473,10 @@ MonoBehaviour:
   joint: {fileID: 0}
   rope: {fileID: 0}
   beLarger: 0
+  toLargeSize: 0
   cookEffect: {fileID: 0}
+  boss: {fileID: 0}
+  isCore: 0
 --- !u!1 &1050641803542220902
 GameObject:
   m_ObjectHideFlags: 0
@@ -686,7 +692,10 @@ MonoBehaviour:
   joint: {fileID: 0}
   rope: {fileID: 0}
   beLarger: 0
+  toLargeSize: 0
   cookEffect: {fileID: 0}
+  boss: {fileID: 0}
+  isCore: 0
 --- !u!1 &4543619153787591511
 GameObject:
   m_ObjectHideFlags: 0
@@ -955,6 +964,7 @@ MonoBehaviour:
   joint: {fileID: 0}
   rope: {fileID: 0}
   beLarger: 0
+  toLargeSize: 0
   cookEffect: {fileID: 0}
   matState: 1
   spinee: {fileID: 0}
@@ -1011,13 +1021,13 @@ MonoBehaviour:
   portalsController: {fileID: 0}
   states:
   - coreHp: 1000
-    scale: {x: 1.2, y: 1.2, z: 1}
+    scale: 1.2
     weaknesses:
     - obj: {fileID: 8862782217783424001}
       Hp: 1000
     core: {fileID: 7624321539853016387}
   - coreHp: 1000
-    scale: {x: 2.4, y: 2.4, z: 1}
+    scale: 2.4
     weaknesses:
     - obj: {fileID: 7403540087022631444}
       Hp: 1000
@@ -1025,7 +1035,7 @@ MonoBehaviour:
       Hp: 1000
     core: {fileID: 1310476709091827658}
   - coreHp: 1000
-    scale: {x: 4, y: 4, z: 1}
+    scale: 4
     weaknesses:
     - obj: {fileID: 6866918994114896486}
       Hp: 1000
@@ -1033,6 +1043,7 @@ MonoBehaviour:
       Hp: 1000
     core: {fileID: 7724734883231965489}
   curStateId: 0
+  restWeaknessNum: 0
 --- !u!1 &6139679835290116115
 GameObject:
   m_ObjectHideFlags: 0
@@ -1222,7 +1233,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 0
+  m_IsActive: 1
 --- !u!4 &8740087295160777340
 Transform:
   m_ObjectHideFlags: 0
@@ -1260,7 +1271,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 1
+  m_IsActive: 0
 --- !u!4 &8374679732363999493
 Transform:
   m_ObjectHideFlags: 0
@@ -1423,7 +1434,10 @@ MonoBehaviour:
   joint: {fileID: 0}
   rope: {fileID: 0}
   beLarger: 0
+  toLargeSize: 0
   cookEffect: {fileID: 0}
+  boss: {fileID: 0}
+  isCore: 0
 --- !u!1 &7208291223413765209
 GameObject:
   m_ObjectHideFlags: 0
@@ -1666,7 +1680,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 1
+  m_IsActive: 0
 --- !u!4 &5995669274320448188
 Transform:
   m_ObjectHideFlags: 0
@@ -1829,7 +1843,10 @@ MonoBehaviour:
   joint: {fileID: 0}
   rope: {fileID: 0}
   beLarger: 0
+  toLargeSize: 0
   cookEffect: {fileID: 0}
+  boss: {fileID: 0}
+  isCore: 0
 --- !u!1 &7624321539853016387
 GameObject:
   m_ObjectHideFlags: 0
@@ -2013,7 +2030,10 @@ MonoBehaviour:
   joint: {fileID: 0}
   rope: {fileID: 0}
   beLarger: 0
+  toLargeSize: 0
   cookEffect: {fileID: 0}
+  boss: {fileID: 0}
+  isCore: 0
 --- !u!1 &7724734883231965489
 GameObject:
   m_ObjectHideFlags: 0
@@ -2197,7 +2217,10 @@ MonoBehaviour:
   joint: {fileID: 0}
   rope: {fileID: 0}
   beLarger: 0
+  toLargeSize: 0
   cookEffect: {fileID: 0}
+  boss: {fileID: 0}
+  isCore: 0
 --- !u!1 &8560672494665079236
 GameObject:
   m_ObjectHideFlags: 0
@@ -2450,7 +2473,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 0
+  m_IsActive: 1
 --- !u!4 &4557461329965901595
 Transform:
   m_ObjectHideFlags: 0
@@ -2488,7 +2511,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 1
+  m_IsActive: 0
 --- !u!4 &7024109113243393379
 Transform:
   m_ObjectHideFlags: 0
@@ -2651,4 +2674,7 @@ MonoBehaviour:
   joint: {fileID: 0}
   rope: {fileID: 0}
   beLarger: 0
+  toLargeSize: 0
   cookEffect: {fileID: 0}
+  boss: {fileID: 0}
+  isCore: 0

+ 61 - 10
ActionTowerDefense/Assets/Scripts/Boss/Boss.cs

@@ -15,9 +15,9 @@ public enum AttackState
 [System.Serializable]
 public struct BossState
 {
-    public int coreHp;              //核心血量
-    public Vector3 scale;           //体型
-    public StateWeakness[] weaknesses;   //弱点
+    public int coreHp;                      //核心血量
+    public float scale;                     //体型
+    public StateWeakness[] weaknesses;      //弱点
     public GameObject core;
 }
 
@@ -31,10 +31,13 @@ public struct StateWeakness
 public class Boss : MoveCharacter
 {
     [Header("Boss属性")]
-    public BossState[] states;          //阶段
-    public int curStateId;              //当前处于阶段n
+    public BossState[] states;              //阶段
+    private int maxStateId;                 //最高为第几阶段,0开始
+    public int curStateId;                  //当前处于阶段n
     private BossState curState;
-    private int curStateTotalHp;        //当前阶段总血量
+    private int curStateTotalHp;            //当前阶段总血量
+    public int restWeaknessNum;             //剩余弱点数量
+    private Weakness coreWeakness;
 
     //计算当前形态总血量
     private void CalculateHp()
@@ -45,12 +48,16 @@ public class Boss : MoveCharacter
             curStateTotalHp += w.Hp;
         }
         totalHp = curStateTotalHp;
+        hp = totalHp;
+        uiHp.Show(hp, totalHp);
     }
 
     //切换形态
-    private void ChangeState()
+    private void ChangeBossState()
     {
         curState = states[curStateId];
+        toLargeSize = curState.scale;
+        beLarger = true;
         CalculateHp();
         ChangeWeakness();
     }
@@ -59,7 +66,8 @@ public class Boss : MoveCharacter
     private void ChangeWeakness()
     {
         StateWeakness[] ws = curState.weaknesses;
-        for (int i = 0; i < ws.Length; i++)
+        restWeaknessNum = ws.Length;
+        for (int i = 0; i < restWeaknessNum; i++)
         {
             Weakness w = ws[i].obj.GetComponent<Weakness>();
             w.totalHp = ws[i].Hp;
@@ -70,8 +78,9 @@ public class Boss : MoveCharacter
 
     private void Start()
     {
-        ChangeState();
+        ChangeBossState();
         base.Init();
+        maxStateId = states.Length - 1;
     }
 
     public override void BeHit(int damage, Vector3 force, bool changeHurt, float repelValue)
@@ -80,8 +89,50 @@ public class Boss : MoveCharacter
         uiHp.Show(hp, totalHp);
         if (hp <= 0)
         {
-            ChangeState(CharacterState.Die);
+            coreWeakness.ChangeState(CharacterState.Die);
+            if (curStateId < maxStateId)
+            {
+                curStateId++;
+                ChangeBossState();
+            }
+            else
+            {
+                print(1);
+                ChangeState(CharacterState.Die);
+            }
             return;
         }
     }
+
+    public void CheckCoreOut()
+    {
+        restWeaknessNum -= 1;
+        if (restWeaknessNum == 0)
+        {
+            coreWeakness = curState.core.GetComponent<Weakness>();
+            coreWeakness.boss = this;
+            coreWeakness.isCore = true;
+            curState.core.SetActive(true);
+        }
+    }
+
+    private void Update()
+    {
+        if (beLarger)
+        {
+            Enlarge();
+        }
+    }
+
+    public override void ChangeState(CharacterState newState)
+    {
+        switch (newState)
+        {
+            case CharacterState.Die:
+                gameObject.SetActive(false);
+                break;
+            default:
+                break;
+        }
+    }
 }

+ 13 - 5
ActionTowerDefense/Assets/Scripts/Boss/Weakness.cs

@@ -4,8 +4,9 @@ using UnityEngine;
 
 public class Weakness : Character
 {
-    [Header("¶¥Í·ÉÏ˾")]
+    [Header("ÊôÐÔ")]
     public Boss boss;
+    public bool isCore;
 
     private void Start()
     {
@@ -15,11 +16,14 @@ public class Weakness : Character
 
     public override void BeHit(int damage, Vector3 force, bool changeHurt, float repelValue)
     {
-        hp -= damage;
-        if (hp <= 0)
+        if (!isCore)
         {
-            ChangeState(CharacterState.Die);
-            return;
+            hp -= damage;
+            if (hp <= 0)
+            {
+                ChangeState(CharacterState.Die);
+                return;
+            }
         }
         boss.BeHit(damage, force, changeHurt, repelValue);
     }
@@ -29,6 +33,10 @@ public class Weakness : Character
         switch (newState)
         {
             case CharacterState.Die:
+                if (!isCore)
+                {
+                    boss.CheckCoreOut();
+                }
                 gameObject.SetActive(false);
                 break;
             default:

+ 1 - 1
ActionTowerDefense/Assets/Scripts/Character.cs

@@ -122,7 +122,7 @@ public class Character : MonoBehaviour
 
     [Header("体型增大")]
     public bool beLarger = false;
-    private float toLargeSize = 0;                  //变大程度
+    public float toLargeSize = 0;                   //变大程度
     private Vector3 speed = new Vector3(1, 1, 0);   //变大速度
 
     [Header("特效")]