So I’m using this as targeting systems. Works fine until an object is deleted from the game such as an enemy when it dies. I tried many things but cant get the list to update it list selection.
public class Targeting : MonoBehaviour {
public List<Transform> targets;
public Transform selectedTarget;
private Transform myTransform;
// Use this for initialization
void Start () {
targets = new List<Transform>();
addAllEnemies();
selectedTarget = null;
myTransform = transform;
}
public void addAllEnemies()
{
GameObject [] go = GameObject.FindGameObjectsWithTag("Targetable");
foreach(GameObject Targetable in go)
addTarget(Targetable.transform);
}
public void addTarget(Transform Targetable)
{
targets.Add(Targetable);
}
private void sortTargetbyDistance()
{
targets.Sort(delegate(Transform t1, Transform t2) {
return Vector3.Distance(t1.position, myTransform.position).CompareTo(Vector3.Distance(t2.position, myTransform.position));
});
}
private void targetEnemy()
{
if (selectedTarget == null)
{
sortTargetbyDistance();
selectedTarget = targets[0];
}
else
{
int index = targets.IndexOf(selectedTarget);
if (index < targets.Count -1)
{
index++ ;
}
else
{
index = 0;
}
deSelect();
selectedTarget = targets[index];
}
selectTarget();
}
private void selectTarget()
{
//Effect when target gets selected.
selectedTarget.renderer.material.color = Color.yellow;
PlayerAttack pa = (PlayerAttack)GetComponent("PlayerAttack");
pa.target = selectedTarget.gameObject;
}
private void deSelect()
{
selectedTarget.renderer.material.color = Color.blue;
selectedTarget = null;
}
// Update is called once per frame
void Update () {
if(Input.GetKeyDown(KeyCode.Tab))
{
targetEnemy();
}
}
}