Ну а в чём моя ошибка, если ты заставляешь меня делить на ноль? Или просишь открыть меня файл, который ты почему-то не создал? Или так забил память, что мне её не хватило? Поэтому я тебе и сообщаю, об исключительной ситуации, разгребать последствия которой нужно тебе, а не мне - обычной функции. Возможно это у тебя ошибка. А мой код работает чётко.
A a2 - это ничто, вы просто описали сигнатуру переменной, считайте просто футляр от скрипки. Пока вы не создали объект (скрипку) через new, который вы положите в футляр, вы не можете ни чего с футляром делать. Нельзя сыграть на скрипке a2.X = 1; если её нет.
Потоков надо запускать на 1к, а чуть меньше чем ядер в системе, чтобы система не вставала колом от 100% загрузки ядер. Например для 8 ядер оптимально будет 6 поток, тогда пользователь вообще не заметит нагрузку, кроме жужжания вентилятора.
Это же банальная физика. Вы задали объекту скорость, вот он с ней и движется. Ему ничто не мешает. Или вводите трение или возвращайте скорость в 0 когда нужно.
Надо понимать, что асинхронный метод возвращает управление назад как только встретит await. Поэтому проста так вызвать два ваших метода подряд и надеяться на лучшее нельзя.
В редакторе кода подвести мышку с проблемной строки и искать значок с подсказкой по устранению её.
Либо вручную добить сборку в проект где этот класс NavMeshAgent объявлен, и указать его namespace в using.
Rectangle.IntersectWith() работает 100%, у вас проблема в данных или в логике их изменения. Например вы сначала сделали проверку в текущих позициях, а потом подвинули и они у вас налезли.