2016-03-07 72 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你错过了我的代码 –

相关问题