Ver Fonte

修复根据塔血量出的传送门不出怪 问题

LAPTOP-OM1V99U2\永远de小亡灵 há 1 ano atrás
pai
commit
30804bdd8b

+ 5 - 1
ActionTowerDefense/Assets/Resources/Prefab/Portal/EnemyDoor.prefab

@@ -232,6 +232,7 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 53ec2c8d52251f84f87a1029c11fdfee, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
+  totalHp: 0
   portalsControllers:
   - {fileID: 4549521364013075667}
   coreCharacter: {fileID: 6899423697252304525}
@@ -249,7 +250,7 @@ MonoBehaviour:
   - {fileID: 8907034643631341414}
   - {fileID: 4382259613569250176}
   - {fileID: 2597556103484513291}
-  enemyNumber: -1
+  enemyNumber: 0
   enemyNumberText: {fileID: 2620421833105173639}
   id: 0
   createTimeCountDown: 0
@@ -1049,6 +1050,8 @@ MonoBehaviour:
   canNotAddForce: 1
   canNotChangeHurt: 0
   invincibleTime: 0
+  injuryNumText: {fileID: 0}
+  showInjuryNum: 0
   totalDieKeepTime: 2
   dieKeepTime: 0
   canHitFly: 0
@@ -1318,6 +1321,7 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   owner: {fileID: 0}
+  attackerID: 0
 --- !u!1 &6204547102456506843
 GameObject:
   m_ObjectHideFlags: 0

+ 5 - 1
ActionTowerDefense/Assets/Resources/Prefab/Portal/Portals.prefab

@@ -233,6 +233,7 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 53ec2c8d52251f84f87a1029c11fdfee, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
+  totalHp: 0
   portalsControllers:
   - {fileID: 693438331892580526}
   - {fileID: 693438332605768576}
@@ -254,7 +255,7 @@ MonoBehaviour:
   - {fileID: 8907034643631341414}
   - {fileID: 4382259613569250176}
   - {fileID: 2597556103484513291}
-  enemyNumber: -1
+  enemyNumber: 0
   enemyNumberText: {fileID: 2620421833105173639}
   id: 0
   createTimeCountDown: 0
@@ -1297,6 +1298,8 @@ MonoBehaviour:
   canNotAddForce: 1
   canNotChangeHurt: 0
   invincibleTime: 0
+  injuryNumText: {fileID: 0}
+  showInjuryNum: 0
   totalDieKeepTime: 2
   dieKeepTime: 0
   canHitFly: 0
@@ -1770,6 +1773,7 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   owner: {fileID: 0}
+  attackerID: 0
 --- !u!1 &6204547102456506843
 GameObject:
   m_ObjectHideFlags: 0

+ 10 - 1
ActionTowerDefense/Assets/Resources/Prefab/Portal/Portals_Player.prefab

@@ -233,6 +233,7 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 53ec2c8d52251f84f87a1029c11fdfee, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
+  totalHp: 0
   portalsControllers:
   - {fileID: 693438331892580526}
   - {fileID: 693438332605768576}
@@ -254,13 +255,14 @@ MonoBehaviour:
   - {fileID: 8907034643631341414}
   - {fileID: 4382259613569250176}
   - {fileID: 2597556103484513291}
-  enemyNumber: -1
+  enemyNumber: 0
   enemyNumberText: {fileID: 2620421833105173639}
   id: 0
   createTimeCountDown: 0
   totalCreateTimeCountDown: 10
   ani: {fileID: 4157785550026956461}
   portalUIParent: {fileID: 0}
+  onlyEnemy: 0
 --- !u!95 &4157785550026956461
 Animator:
   serializedVersion: 4
@@ -343,6 +345,7 @@ MonoBehaviour:
   rbs: []
   TransmitCD: 1
   isReverse: 0
+  onlyEnemy: 0
 --- !u!1 &693438332605768589
 GameObject:
   m_ObjectHideFlags: 0
@@ -405,6 +408,7 @@ MonoBehaviour:
   rbs: []
   TransmitCD: 1
   isReverse: 0
+  onlyEnemy: 0
 --- !u!1 &896075485547733324
 GameObject:
   m_ObjectHideFlags: 0
@@ -1128,6 +1132,7 @@ MonoBehaviour:
   rbs: []
   TransmitCD: 1
   isReverse: 0
+  onlyEnemy: 0
 --- !u!1 &2840691249036693841
 GameObject:
   m_ObjectHideFlags: 0
@@ -1293,6 +1298,8 @@ MonoBehaviour:
   canNotAddForce: 1
   canNotChangeHurt: 0
   invincibleTime: 0
+  injuryNumText: {fileID: 0}
+  showInjuryNum: 0
   totalDieKeepTime: 2
   dieKeepTime: 0
   canHitFly: 0
@@ -1630,6 +1637,7 @@ MonoBehaviour:
   rbs: []
   TransmitCD: 1
   isReverse: 0
+  onlyEnemy: 0
 --- !u!1 &5690804638823049460
 GameObject:
   m_ObjectHideFlags: 0
@@ -1765,6 +1773,7 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   owner: {fileID: 0}
+  attackerID: 0
 --- !u!1 &6204547102456506843
 GameObject:
   m_ObjectHideFlags: 0

+ 25 - 18
ActionTowerDefense/Assets/Scripts/EnemyCreater.cs

@@ -55,7 +55,7 @@ public class EnemyCreater : MonoBehaviour
     {
         for (int i = 0; i < cfgCreateEnemy.Count; i++)
         {
-            if(cfgCreateEnemy[i].BuildingID == 0)
+            if(cfgCreateEnemy[i].Time != 0)
             {
                 if (cfgCreateEnemy[i].Time <= gameTime && !createdEnemy[i])
                 {
@@ -69,8 +69,17 @@ public class EnemyCreater : MonoBehaviour
                 buildingDic.TryGetValue(cfgCreateEnemy[i].BuildingID, out result);
                 if (result != null)
                 {
+                    //根据防御塔血量出怪
                     EnemyTower enemyTower = result.GetComponent<EnemyTower>();
-                    if (enemyTower.hp * 100 <= enemyTower.totalHp * cfgCreateEnemy[i].BuildingHP && !createdEnemy[i])
+                    if (enemyTower!= null && !createdEnemy[i] && enemyTower.hp * 100 <= enemyTower.totalHp * cfgCreateEnemy[i].BuildingHP)
+                    {
+                        createdEnemy[i] = true;
+                        StartCreateEnemy(i);
+                    }
+                    //根据传送门血量出怪
+                    CoreCharacter coreCharacter = result.GetComponentInChildren<CoreCharacter>();
+                    PortalsCreater portalsCreater = result.GetComponent<PortalsCreater>();
+                    if(coreCharacter != null && !createdEnemy[i] && portalsCreater.createTimeCountDown<0 && coreCharacter.hp * 100 <= coreCharacter.totalHp * cfgCreateEnemy[i].BuildingHP)
                     {
                         createdEnemy[i] = true;
                         StartCreateEnemy(i);
@@ -89,7 +98,7 @@ public class EnemyCreater : MonoBehaviour
                     createdBuilding[i] = true;
                     if (gameTime < portalsCreateTime)
                     {
-                        StartCreateBuilding(i, cfgCreateBuilding[i].Time);
+                        StartCreateBuilding(i, cfgCreateBuilding[i].Time - gameTime );
                     }
                     else
                     {
@@ -108,14 +117,7 @@ public class EnemyCreater : MonoBehaviour
                     if (enemyTower.hp * 100 <= enemyTower.totalHp * cfgCreateBuilding[i].RefreshBuildingHP && !createdBuilding[i])
                     {
                         createdBuilding[i] = true;
-                        if (gameTime < portalsCreateTime)
-                        {
-                            StartCreateBuilding(i, cfgCreateBuilding[i].Time);
-                        }
-                        else
-                        {
-                            StartCreateBuilding(i, portalsCreateTime);
-                        }
+                        StartCreateBuilding(i, portalsCreateTime);
                     }
                 }
             }
@@ -134,7 +136,7 @@ public class EnemyCreater : MonoBehaviour
         {
             case 0:
                 List<float> pos = singleCreateBuilding.Position.Concat(singleCreateBuilding.Position1).ToList();
-                CreatePortal(singleCreateBuilding.BuildingID, pos, singleCreateBuilding.Scale, singleCreateBuilding.HPRatio, createTime);
+                CreatePortal(singleCreateBuilding.ID, singleCreateBuilding.BuildingID, pos, singleCreateBuilding.Scale, singleCreateBuilding.HPRatio, createTime);
                 break;
             case 1:
                 Vector3 positon = new Vector3(singleCreateBuilding.Position[0], singleCreateBuilding.Position[1], singleCreateBuilding.Position[2]);
@@ -164,9 +166,16 @@ public class EnemyCreater : MonoBehaviour
                                 + Random.Range(-singleCreateEnemy.ZRandomRange / 2, singleCreateEnemy.ZRandomRange / 2));
                     break;
                 case 1:
-                    pos = buildingDic[singleCreateEnemy.BuildingID].transform.position;
+                    GameObject building = buildingDic[singleCreateEnemy.BuildingID];
+                    pos = building.transform.position;
                     pos.y += Random.Range(0, singleCreateEnemy.YRandomRange);
                     pos.z += Random.Range(0, singleCreateEnemy.ZRandomRange);
+                    PortalsCreater portalsCreater = building.GetComponent<PortalsCreater>();
+                    if (portalsCreater != null)
+                    {
+                        portalsCreater.enemyNumber -= 1;
+                        portalsCreater.enemyNumberText.text = portalsCreater.enemyNumber.ToString();
+                    }
                     break;
             }
             CreateEnemy(singleCreateEnemy.EnemyID, pos, singleCreateEnemy.HPRatio, singleCreateEnemy.AttackRatio);
@@ -188,19 +197,17 @@ public class EnemyCreater : MonoBehaviour
         enemyTower.attack1Infos[0] = attackInfo;
     }
 
-    public void CreatePortal(int buildingID, List<float> pos, List<float> scale, float hpRatio, float createTime)
+    public void CreatePortal(int ID, int buildingID, List<float> pos, List<float> scale, float hpRatio, float createTime)
     {
         SingleBuildingConfig cfgBuilding = GameManager.instance.allCfgData.CfgBuilding.Get(buildingID);
         GameObject portalObj = Util.Instantiate(cfgBuilding.BuildingPrefab);
         PortalsCreater portalsCreater = portalObj.GetComponent<PortalsCreater>();
-        portalsCreater.id = buildingID;
-        buildingDic.Add(buildingID, portalObj);
+        portalsCreater.id = ID;
+        buildingDic.Add(ID, portalObj);
         portalsCreater.totalHp = (int)(cfgBuilding.HP * hpRatio);
         portalsCreater.enemyCreater = this;
         portalsCreater.portalUIParent = portalUIParent;
         portalsCreater.Init(pos,scale,createTime);
-        portalsCreater.enemyNumber -= 1;
-        portalsCreater.enemyNumberText.text = portalsCreater.enemyNumber.ToString();
         if (portalsCreater.enemyNumber == 0)
         {
             portalsCreater.enemyNumberText.transform.parent.gameObject.SetActive(false);

+ 16 - 10
ActionTowerDefense/Assets/Scripts/Portal/PortalsCreater.cs

@@ -18,7 +18,7 @@ public class PortalsCreater : MonoBehaviour
     public GameObject countDownUI;              //玩家屏幕上的UI
     public GameObject countDownUIPrefeb;        //UI预制体
     public GameObject[] show;                   //核心出现
-    public float enemyNumber = -1;              //剩余敌人数量
+    public float enemyNumber = 0;              //剩余敌人数量
     public TextMeshProUGUI enemyNumberText;     //剩余敌人数量UI
     public int id;                              //自身传送门id
     public float createTimeCountDown;           //传送门出生时间
@@ -74,19 +74,25 @@ public class PortalsCreater : MonoBehaviour
     public void Init(List<float> position, List<float> scale, float createTime)
     {
         transform.position = Vector3.zero;
-        for(int i = 0; i < portal.Length; i++)
+        transform.position = new Vector3(position[0], position[1], position[2]);
+        if(portal.Length == 2)
         {
-            portal[i].transform.position = 
-                new Vector3(position[0 + i * 3], position[1 + i * 3], position[2 + i * 3]);
-            Vector3 localScale = portal[i].transform.localScale;
-            localScale *= Mathf.Abs(scale[i]);
-            if (scale[i] < 0)
+            portal[1].transform.position =
+                    new Vector3(position[3], position[4], position[5]);
+            for (int i = 0; i < 2; i++)
             {
-                localScale.x *= -1;
+                
+                Vector3 localScale = portal[i].transform.localScale;
+                localScale *= Mathf.Abs(scale[i]);
+                if (scale[i] < 0)
+                {
+                    localScale.x *= -1;
+                }
+                portal[i].transform.localScale = localScale;
+                portalUI[i].transform.localScale = localScale / 100;
             }
-            portal[i].transform.localScale = localScale;
-            portalUI[i].transform.localScale = localScale / 100;
         }
+
         if(scale.Count == 2)
         {
             if (scale[0] != scale[1])