C# - Unity3D проблема с GameObject.FindGameObjectsWithTag и foreach

Сначала нахожу объекты которые меня интересуют с помощью GameObject.FindGameObjectsWithTag. И завожу их в один масив All[ ] . Создаю NavMeshAgent>. Гоняю агента по выбраным точкам на карте. До того момента как он не встретиться с кемто из массива All[ ]. И казалось бы все работает, но НО. Агент тригертся только на последний обьект находящийся в массиве. 2 дня просидел, перепробывал множество способов, результат один, может прогонять масив не через ( foreach или for ) . Может есть комплексное решение проблемы. Или вообще другой способ, я в програмировании хлебушек но стараюсь как могу. Любая идея принимается и тестится. Спасибо!!!

public void getTarget(GameObject[] targets) прогоняет обьекты массива - именно сдесь и кроется проблема

public GameObject[] Concat(GameObject[] first, GameObject[] second, GameObject[] third) обьединяет масиивы обьектов

public void moveToTarget(Vector3 target) уазывает на цель для NavMeshAgent>

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

public class MinionMoveByLine : MonoBehaviour
{
public enum MovementType
{
    Moveing,
    Learp
}
//Переменные для перемещения по карте
public MovementType type = MovementType.Moveing;
public NavMeshLineToMove MyLine;
public float speed = 1;
public float maxDistance = .3f;
private NavMeshAgent enemy;

//Переменные для растояний и приоритета крипов
private GameObject[] minions;
private GameObject[] towers;
private GameObject[] players;
private GameObject[] All;
public GameObject minion;
private Vector3[] position;
private Vector3 targetPosition;
private float distanceVisionForAttack = 6f; 
private float radiusOfAttack = 2f;

private IEnumerator<Transform> pointInPath;

// Start is called before the first frame update
void Start()
{
    
    minions = GameObject.FindGameObjectsWithTag("minion");
    towers =  GameObject.FindGameObjectsWithTag("tower");
    players = GameObject.FindGameObjectsWithTag("player");

    All = Concat(players, towers, minions);        
    Debug.Log("minions "+ minions.Length);
    Debug.Log("towers " + towers.Length);
    Debug.Log("players " + players.Length);

    minion = (GameObject)this.gameObject;

    enemy = GetComponent<NavMeshAgent>();
    
    if (MyLine == null)
    {
        Debug.Log("Line Not Set");
        return;       
    }

    pointInPath = MyLine.GetNextPathPoint();

    pointInPath.MoveNext();

    if (pointInPath.Current == null)
    {
        Debug.Log("Need point to move");
        return;
    }

    transform.position = pointInPath.Current.position;

}

void LateUpdate()
{
    Vector3 position = minion.transform.position;

    if (pointInPath == null || pointInPath.Current == null)
    {
        return;
    }
    foreach(var obj in All)
    {
        Debug.Log(All.Length);
        Debug.Log(obj);
    }
    getTarget(All);
           
     var distanceSqure = (transform.position - pointInPath.Current.position).sqrMagnitude;
    if (distanceSqure < maxDistance * maxDistance)
    {
        pointInPath.MoveNext();
    }
   
}

public GameObject[] Concat(GameObject[] first, GameObject[] second, GameObject[] third)
{
    GameObject[] Concated = new GameObject[first.Length+second.Length+third.Length];

    for (int i = 0; i < first.Length; i++)
    {
        Concated[i] = first[i];
    }
    for (int i = 0; i < second.Length; i++)
    {
        Concated[first.Length + i] = second[i];
    }
    for (int i = 0; i < third.Length; i++)
    {
        Concated[first.Length + second.Length + i] = third[i];
    }
    return Concated;
}

public void getTarget(GameObject[] targets)
{
    
    Vector3 minionPosition = this.transform.position;
    
    foreach (GameObject go in targets)
    {
        
        Transform transform = go.GetComponent<Transform>();
        Vector3 transformPosition = transform.position;
        float distanceToTarget = Vector3.Distance(transformPosition, minionPosition);
        if (distanceToTarget <= distanceVisionForAttack && distanceToTarget > radiusOfAttack)
        {
            moveToTarget(transformPosition);
        }else if(distanceToTarget <= radiusOfAttack)
        {
            moveToTarget(minion.transform.position);
        }
        else if(type == MovementType.Moveing && distanceToTarget > distanceVisionForAttack)
            {

            enemy.SetDestination(pointInPath.Current.position);
        }
    }
    

    var distanceSqure = (transform.position - pointInPath.Current.position).sqrMagnitude;
    if (distanceSqure < maxDistance * maxDistance)
    {
        pointInPath.MoveNext();
    }
}

public void moveToTarget(Vector3 target)
    {
    enemy.SetDestination(target);
    
    }
}

Переменные в массиве

Что происходит на сцене


Ответы (0 шт):