Zefirot
@Zefirot

Почему низкий фпс при большом количестве CharacterController?

У меня на сцене по задумке должно быть примерно 1000 нпс, каждый что-то делает, например ходит от точки а к точке б, иногда подпрыгивает если нужно.
Я прикрепил им CharacterController и для теста просто их заспавнил, 1000 единиц.
скрипт по минимум, только движение вперёд
controller.Move(MoveDirection * Time.deltaTime * speed);

фпс сразу уменьшилось до 5-8...
То есть 1000 пустых объектов с CharacterController, всё больше на нём ничего нет, при этом такой низкий фпс, а это я даже им не прицепил скрипт который будет их направлять...

Что можно сделать в данной ситуации? Как можно двигать 1000 единиц, при этом чтобы фпс не просаживался?

(контроллер должен быть у них однозначно, так как местность генерируемая, склоны, обрывы...)
(3D проект)
  • Вопрос задан
  • 63 просмотра
Решения вопроса 1
@Ezekiel4
Охотник на пиратов и сборщик монолитов
Почему - потому что много объектов. В юнити потребление ресурсов никогда не росло линейно к количеству объектов. Одно накладывается на другое. Столь большое количество активных объектов нестандартная ситуация, потому тут нет шаблонного эффективного решения. На ум приходит попытаться оптимизировать код или написать свой контроллер, но при таких числах оно вам даст едва ли 20 фпс.

Идеальное решение этой задачи довольно сложное, но если вы не прочь пободаться с математикой и логикой, то можете попробовать. Первая итерация этой системы заключается в создании пула выключенных объектов, откуда вы достаёте и расставляете видимые объекты, и куда прячете, когда их не видно. Для каждого объекта считается его траектория движения и по таймеру вы можете вычислить его местоположение в любой момент времени. Следующим шагом можно покрыть всю карту небольшими зонами, для каждой из которых назначить проходимость. Например, терновый куст или крутой подъём должны нормально так затормозить. И при рассчёте местоположения персонажа на пути учитывать эти зоны.

Другой вопрос, а будет ли в игре реально тысяча объектов? Это такой стресс-тест? Или это усреднённое значение и реально их может быть и полторы? Я это к тому, что если тысяча не предел, то, возможно, придётся писать что-то ещё более сложное, чем система выше.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы