2016-03-07 100 views
-4

由於某種原因,我的代碼在函數TargetEnemy()的底部不起作用。我嘗試從列表中刪除null GameObjects,但它們仍然在列表中。爲什麼不從null中刪除GameObjects?

using UnityEngine; 
using System.Collections; 
using System.Collections.Generic; 

public class TurretController : MonoBehaviour { 

    public Transform turretBulletSpawn; 
    public GameObject turretBullet; 

    public List <GameObject> storedEnemies = new List <GameObject>(); 

    void Start() 
    { 

    } 

    void Update() 
    { 
     TargetEnemy(); 
    } 

    public void OnTriggerEnter (Collider enemyTriggered) 
    { 
     if (enemyTriggered.tag == "Enemy") 
     { 
      storedEnemies.Add(enemyTriggered.gameObject); 
     } 
    } 

    public void OnTriggerExit (Collider enemyTriggered) 
    { 
     storedEnemies.Remove(enemyTriggered.gameObject); 
    } 

    void TargetEnemy() 
    { 
     for (int i = 0; i < storedEnemies.Count; i++) 
     { 
      Quaternion rotate = Quaternion.LookRotation(storedEnemies[i].transform.position - transform.position); 
      transform.rotation = Quaternion.Slerp(transform.rotation, rotate, Time.deltaTime * 2); 
      Instantiate (turretBullet, turretBulletSpawn.position, turretBulletSpawn.rotation); 

      if (storedEnemies[i].gameObject == null) 
      { 
       storedEnemies.RemoveAt(i); 
      } 
     } 
    } 
} 
+1

請不要用標記之類的「緊急」的問題... –

+1

這是不急,這不是JavaScript的。 – 2016-03-07 00:18:32

+0

好吧,你能幫助我,雖然 –

回答

0

有一個巨大的錯誤,你應該試着記住這FOR EVER! 假設targetEnemy有3條記錄,第二條記錄爲空。讓我們假設您的代碼將正確刪除空記錄。

前兩個記錄將被正確處理。 但在第三次迭代之前,您的列表只包含2條記錄,您正試圖訪問第三條記錄。這將拋出一個IndexOutOfrange或IndexOutOfBounds異常。

這將是正確的:

List<int> toRemove = new List<int>(); 

for(int i = 0; i < storedEnemies.Count; i++) { 
    /*some code*/ 

    if(storedEnemies[i].gameObject == null) { 
     toRemove.Add(i); //Note: I do not change your targetEnemy List 
    } 
} 

//Iterate again and remove all stored indexes 
int counter = 0; 
for(int i = 0; i < toRemove.Count; i++) { 
    storedEnemies.Remove(i - counter); 
    counter++; 
} 
+0

無效TargetEnemy() \t { \t \t的for(int i = 0;我

+0

我如何使用 –

+0

@EugeneD你錯過了我的代碼 –

相關問題