- Home /
Removing objects from an array
Hey everyone. I have AI enemies and some weapon meshes. These meshes have C# scripts attached to them that damage the enemies. But, there's only one target (as a GameObject) it can lock on to. I'm using arrays (not List<>, just arrays) to handle this, but I want it to remove an object from the array when it dies. Is there a way to that? Thanks.
Here's one of the scripts:
 using UnityEngine;
 using System.Collections;
 
 public class HammerDamage : MonoBehaviour {
     public GameObject[] targets;
     public GameObject target;
     public float attackTimer;
     public float coolDown;
 
     // Use this for initialization
     void Start () {
         attackTimer = 0;
         coolDown = 2.0f;
         
     //    targets = GameObject.FindGameObjectsWithTag("Enemy 3").Select(g=>g.transform).ToList();
     
     }
     
     // Update is called once per frame
     void Update () {
         if(attackTimer > 0)
             attackTimer -= Time.deltaTime;
         
         if(attackTimer < 0)
             attackTimer = 0;
         
         if(Input.GetKeyUp(KeyCode.F)) {
             if(attackTimer == 0) {
                 HammerAttack();
                 attackTimer = coolDown;
             }
         }
     }
     
     public void HammerAttack() {
         GameObject[] gos = GameObject.FindGameObjectsWithTag("Enemy 3");
         
         targets = gos;
         
     //    target = gos;
         
         float distance = Vector3.Distance(target.transform.position, transform.position);
         
         Vector3 dir = (target.transform.position - transform.position).normalized;
         
         float direction = Vector3.Dot(dir, transform.forward);
         
         Debug.Log(direction);
         
         if(distance < 2f) {
             if(direction < 0) {
                 EnemyHitPoints ehp = (EnemyHitPoints)target.GetComponent("EnemyHitPoints");
                 ehp.AdjustCurrentHitPoints(-45);
 //        EnemyHealth eh = (EnemyHealth)target.GetComponent("EnemyHealth");
 //        eh.AddjustCurrentHealth(-45);
             }
         }
     }
 }
(if post doesn't look right, please edit)
Answer by GibTreaty · Oct 28, 2012 at 02:11 PM
 System.Collections.Generic.List<GameObject> list = new System.Collections.Generic.List<GameObject>(targets);
 list.Remove(targetObject);
 targets = list.ToArray();
Answer by Wellmann · Feb 01, 2016 at 05:13 PM
If you don't want to uses generics or at all you can also do:
 for (int i = 0; i+1 < targets.Length;i++)
 {
     if(targets[i] == targetObject)
     {
         targets[i] = targets[blocks.Length -1];
         break;
     }
 }
 Array.Resize(ref targets, targets.Length - 1);
Your answer
 
 
             Follow this Question
Related Questions
How to remove objects from a list ? 3 Answers
How do i get my script to work? 2 Answers
Array of GameObjects 4 Answers
FindClosestEnemy() change target? 1 Answer
target and look at random enemies 1 Answer
 koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                