Похоже, проблема заключается в том, как вы добавляете радиус агента Navmesh - если вы добавляете что-то к отрицательному значению, которое уменьшит его, то есть оно будет в пределах покрытия.
Вотнекоторые наглядные примеры:
![Right of cover, plus agent radius](https://i.stack.imgur.com/pAlIM.png)
Итак, как мы можем видеть, что нам действительно нужно сделать,зависит от того, является ли значение, которое мы имеем для нашей целевой позиции, больше или меньше, чем центр объекта, откорректируйте соответственно, чтобы приспособиться к нему:
![Left and right of cover, with correct radius calculation](https://i.stack.imgur.com/y8eZd.png)
Код
Итак, чтобы убедиться, что он работает правильно, вот код, который я предлагаю вам реализовать:
takeCoverSign.transform.position = (takeCoverSign.transform.position.z + takeCoverSign.transform.position.z / 2) - (takeCoverSign.transform.lossyScale.z + takeCoverSign.transform.lossyScale.z / 2);
if(takeCoverSign.transform.position.z - obstacleList[0].position.z > 0)
{
takeCoverSign.transform.position = new Vector3(transform.position.x, transform.position.y, transform.position.z += -navAgent.radius);
}
else
{
takeCoverSign.transform.position = new Vector3(transform.position.x, transform.position.y, transform.position.z += navAgent.radius);
}
Кроме того, обратите внимание на то, как я переименовал вашпеременные.Это верблюжья шкура , и рекомендуется для переменных.
Я также удалил ненужные присвоения переменных, если только нет причин абстрагировать вычисления, вы также можете использовать ссылки наПеременные.
РЕДАКТИРОВАТЬ: скорректировал приведенный выше ответ для создания нового вектора 3 для назначения позиции, а не пытаться напрямую изменить возвращаемое значение.