Просмотр исходного кода

对象被回收的时候没有清除SearchTrigger的trigCharacterDic的问题

DESKTOP-27RMV90\A 3 месяцев назад
Родитель
Сommit
e1161e6107
1 измененных файлов с 12 добавлено и 2 удалено
  1. 12 2
      ActionTowerDefense/Assets/Scripts/Characters/SearchTrigger.cs

+ 12 - 2
ActionTowerDefense/Assets/Scripts/Characters/SearchTrigger.cs

@@ -56,6 +56,17 @@ public class SearchTrigger : MonoBehaviour
         }
     }
 
+    private void OnDisable()
+    {
+        for (int i = 0; i < owner.attackController.targetTypes.Count; i++)
+        {
+            if (trigCharacterDic.ContainsKey(owner.attackController.targetTypes[i]))
+            {
+                trigCharacterDic[owner.attackController.targetTypes[i]].Clear();
+            }
+        }
+    }
+
     private void FixedUpdate()
     {
         for (int i = 0; i < owner.attackController.targetTypes.Count; i++)
@@ -63,7 +74,7 @@ public class SearchTrigger : MonoBehaviour
             if (trigCharacterDic.ContainsKey(owner.attackController.targetTypes[i]))
             {
                 List<BeSearchTrigger> trigList = trigCharacterDic[owner.attackController.targetTypes[i]];
-                for (int j = 0; j < trigList.Count; j++)
+                for (int j = trigList.Count - 1; j >= 0; j--)
                 {
                     if (trigList[j] == null || !trigList[j].enabled || !trigList[j].gameObject.activeInHierarchy || trigList[j].owner.isDie)
                     {
@@ -72,7 +83,6 @@ public class SearchTrigger : MonoBehaviour
                             owner.targetCharacter = null;
                         }
                         trigList.RemoveAt(j);
-                        j--;
                     }
                 }
             }