Ответ проверяющего по предыдущему решению:
1) if (Vector3.Distance(positionNearby, transform.position) < _sphere.radius) - "Vector3.Distance - Это очень затратная операция из-за вычисления корня в конце. У процессора с этим туго. Везде где возможно лучше вместо дистанции использовать sqrMagnitude, это даже в документации написано (просто сравниваешь не с самой дистанцией, а с ее квадратом). https://t.me/KaDR_gamedev/83
2) public event Action<Resource> UnitUnloadResource;
3) public event Action ReadyForNewTask;
4) public event Action<Resource> UnitAimedAtResource; - события именуются в прошедшем времени с окончанием -ed или -ing
5) StartCoroutine(nameof(MoveToResourse), resource);
6) StartCoroutine(nameof(MoveToBase), resource); - немного странное решение. Почему сразу не написать StartCoroutine(MoveToBase (resource));
7) if (_resourceStorage.HasFreeStorageSpace == true) - не делайте явную проверку с true. Ведь результатом сравнения будет всё тоже значение
_base.GetComponent<ResourceDistributor>().Initialize();, а если на базе нет компонента ResourceDistributor?
8) if (_generator == null)
_generator = FindObjectOfType<ResourceGenerator>(); - я бы предпочел в OnValidate выводить ошибку что поле не заполнено
мои разумения:
Про то что вычисления корня это сложная задача для процессора я вообще не знал это же должно быть как умножение и деление по нагрузке, странно и почему нахождение какой то там магнитуды менее затратно чем нахождение корня тоже неизвестно
А остальные замечания все по мелочи я их быстро исправил
Решение: https://github.com/NoNameDeleted/BotsCollectors/tree/d8c7e4c5e330f5f201bbb12e3f1bb240588e8ad1