Не ищет объект в Unity

у меня есть персонаж который двигается за объектом с тегом Enemy, когда такой объект 1 всё работает нормально когда таких объектов много он идёт до одного из них убивает его и всё он останавливается и выдаёт ошибку MissingReferenceException: The object of type ‘Transform’ has been destroyed but you are still trying to access it.
Your script should either check if it is null or you should not destroy the object.

строка по которой он ищет объект

target = GameObject.FindGameObjectWithTag("Enemy").GetComponent<Transform>();

строка по которой он движется за объектом

transform.position = Vector2.MoveTowards(transform.position, target.position, Speed * Time.deltaTime);

Наверно уничтоженный объект остается в списке и находится, до следующего фрейма или типа того.
Можно просто отфильтровать null.
Тут еще, кстати, пропущена проверка, что есть хоть один.

enemies = GameObject.FindGameObjectsWithTag("Enemy").Where(enemy => enemy != null);
if (!enemies.Any())
{
    return;
}

target = enemies[0];

|Ошибка|CS0021|Не удается применить индексирование через [] к выражению типа Enemy.|Assembly-CSharp|C:\Users\37377\New Unity Project (3)\Assets\Scripts\DefencePlayer.cs|31|Активные|

|Ошибка|CS0103|Имя enemy не существует в текущем контексте.|Assembly-CSharp

|
Ошибка|CS0021|Не удается применить индексирование через [] к выражению типа Enemy.|Assembly-CSharp|C:\Users\37377\New Unity Project (3)\Assets\Scripts\DefencePlayer.cs|31|Активные|

|Ошибка|CS1061|GameObject[] не содержит определения Where, и не удалось найти доступный метод расширения Where, принимающий тип GameObject[] в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку).|Assembly-CSharp|C:\Users\37377\New Unity Project (3)\Assets\Scripts\DefencePlayer.cs|20|Активные|

|Ошибка|CS1061|Enemy не содержит определения Any, и не удалось найти доступный метод расширения Any, принимающий тип Enemy в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку).|Assembly-CSharp|C:\Users\37377\New Unity Project (3)\Assets\Scripts\DefencePlayer.cs|26|Активные|

и откуда взялось enemies

var enemies = GameObject.FindGameObjectsWithTag("Enemy").Where(enemy => enemy != null);
if (!enemies.Any())
{
    return;
}

target = enemies.First();
using System.Linq;

|Ошибка|CS0029|Не удается неявно преобразовать тип UnityEngine.GameObject в UnityEngine.Transform.|Assembly-CSharp|C:\Users\37377\New Unity Project (3)\Assets\Scripts\DefencePlayer.cs|28|Активные|

Ну так компонент нужный надо взять как выше.

target = enemies.First().GetComponent<Transform>();

всё равно останавливается и выдаёт ошибку MissingReferenceException: The object of type ‘Transform’ has been destroyed but you are still trying to access it.
Your script should either check if it is null or you should not destroy the object.

А это где выдает? Может тут?)

Потому что target не меняется после уничтожения.

Может тут. А как сделать чтоб он менялся?

В смысле “может”? В ошибке ж есть файл и строка.

да из за этого.

Смотря что когда происходит :man_shrugging:
Например, перед этим искать если он стал null.

if (target == null)
{
    var enemies = GameObject.FindGameObjectsWithTag("Enemy").Where(enemy => enemy != null);
    if (!enemies.Any())
    {
        return;
    }

    target = enemies.First();
}

transform.position = Vector2.MoveTowards(transform.position, target.position, Speed * Time.deltaTime);

появилась ошибка

в этой строке

enemy.healt -= damage;

вот весь метод

    void OnDefenceAttack()
    {
        enemy.healt -= damage;
        TimeBtwAttack = StartTimeBtwAttack;
    }

NullReferenceException: Object reference not set to an instance of an object
DefencePlayer.OnDefenceAttack () (at Assets/Scripts/DefencePlayer.cs:61)

решили так

enemy = GameObject.FindGameObjectWithTag("Enemy").GetComponent<Enemy>();
        enemy.healt -= damage;
        TimeBtwAttack = StartTimeBtwAttack;

и бегает он теперь нормально